我有以下代码:
type value = (* an integer or an error message *)
| Value of int
| Error of string;;
let rec compare_v (lo: value) (ro: value) : value =
match lo with
| Value(l) ->
match ro with
| Value (r) -> if l == r then Value(1) else Value(-1)
运行compare_v Value(9) Value(10);;
会得到:
Line 1, characters 0-9:
1 | compare_v Value(9) Value(10);;
^^^^^^^^^
Error: This function has type value -> value -> value
It is applied to too many arguments; maybe you forgot a `;'.
为什么会这样?
答案 0 :(得分:1)
此子表达式的解析:
compare_v Value(9)
是这样的:
(compare_v Value) (9)
在OCaml函数应用程序中,仅通过并置来表示(并排放置两个表达式),并使其保持关联。在此表达式中,您可以并排使用三个表达式:
compare_v Value (9)
左侧的关联性提供了您所看到的结果。
您应该写的是:
compare_v (Value 9)
在OCaml中,您需要使用不同于主流(Algolic)语言的括号。特别是,括号与调用函数没有任何特殊关系。