为什么ocaml给予过多参数错误?

时间:2019-10-16 16:19:17

标签: ocaml

我有以下代码:

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 `;'.       

为什么会这样?

1 个答案:

答案 0 :(得分:1)

此子表达式的解析:

compare_v Value(9) 

是这样的:

(compare_v Value) (9)

在OCaml函数应用程序中,仅通过并置来表示(并排放置两个表达式),并使其保持关联。在此表达式中,您可以并排使用三个表达式:

compare_v  Value   (9)

左侧的关联性提供了您所看到的结果。

您应该写的是:

compare_v (Value 9)

在OCaml中,您需要使用不同于主流(Algolic)语言的括号。特别是,括号与调用函数没有任何特殊关系。