在 OCAML 中正确使用 'in' 关键字
Correctly using 'in' keyword in OCAML
我最近开始研究 OCAML。我正在阅读《现代编程语言》第 2 版一书。关于 ML 的第一章有一个练习,要求定义 int list -> int
类型的函数 max
到 return 整数列表中的最大元素。另外还有一个提示,建议包含一个辅助函数 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 ->”一个列表
但是期望表达式的类型为 ('b -> 'c -> 'd) list
令我困惑的是,当我单独编写 maxhelper 函数并为其提供参数 [2;3;4] 1
(原始列表为 [1;2;3;4]
)时,它可以正常工作。此外,如果我将 in
下提供的参数替换为
in maxhelper x 0
代码编译并正确运行(对于非负数)。关于将参数传递给 in
或我收到的错误消息,我不确定我错过了什么。主要是为什么追加一个List()
调用会报错?
你在用 Algolic 语言编写函数调用,这是我认为的基本问题。
而不是
maxhelper List.tl(x) List.hd(x)
你应该
maxhelper (List.tl x) (List.hd x)
按照您的写法,有 4 个参数传递给 maxhelper
:List.tl
、x
、List.hd
、x
。
我最近开始研究 OCAML。我正在阅读《现代编程语言》第 2 版一书。关于 ML 的第一章有一个练习,要求定义 int list -> int
类型的函数 max
到 return 整数列表中的最大元素。另外还有一个提示,建议包含一个辅助函数 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 ->”一个列表
但是期望表达式的类型为 ('b -> 'c -> 'd) list
令我困惑的是,当我单独编写 maxhelper 函数并为其提供参数 [2;3;4] 1
(原始列表为 [1;2;3;4]
)时,它可以正常工作。此外,如果我将 in
下提供的参数替换为
in maxhelper x 0
代码编译并正确运行(对于非负数)。关于将参数传递给 in
或我收到的错误消息,我不确定我错过了什么。主要是为什么追加一个List()
调用会报错?
你在用 Algolic 语言编写函数调用,这是我认为的基本问题。
而不是
maxhelper List.tl(x) List.hd(x)
你应该
maxhelper (List.tl x) (List.hd x)
按照您的写法,有 4 个参数传递给 maxhelper
:List.tl
、x
、List.hd
、x
。