【发布时间】:2022-01-22 14:07:58
【问题描述】:
我最近开始研究 OCAML。我正在阅读《现代编程语言》第 2 版一书。关于 ML 的第一章有一个练习,需要定义 int list -> int 类型的函数 max 以返回整数列表中的最大元素。还有一个提示建议包含一个辅助函数maxhelper,它作为第二个参数采用当前最大的元素。那么max定义为:
fun max x = maxhelper (tl x, hd x)
我正在尝试在 OCAML 中实现这一点。这是我的代码:
let max x =
let rec maxhelper x cur_max =
match x with
| [] -> cur_max
| h::t ->
if cur_max < h then maxhelper t h
else maxhelper t cur_max
in maxhelper List.tl(x) List.hd(x)
;;
这导致我无法理解的错误:这个表达式,即最后一行的List.tl(x) 有类型'a list -> 'a list
但是需要一个类型为 ('b -> 'c -> 'd) 列表的表达式
令我困惑的是,当我单独编写 maxhelper 函数并为其提供参数 [2;3;4] 1(原始列表为 [1;2;3;4])时,它可以正常工作。此外,如果我将in 下提供的参数替换为
in maxhelper x 0
代码编译并正常工作(对于非负数)。我不确定我在将参数传递给in 时遗漏了什么,或者我收到的错误消息。主要是List()调用的附加为什么会报错?
【问题讨论】:
标签: functional-programming ocaml ml