我正试图通过Jason Hickey的笔记教自己OCaml,以下练习让我感到难过.问:编写一个函数和给定两个整型界M,N和功能˚F计算的总和.我正在尝试这个:
let rec sum m n f=
if m>n then 0
else if m=n then f n
else f m + sum n m+1 f
Run Code Online (Sandbox Code Playgroud)
但它不起作用,产生类型错误.
你需要一些括号.
let rec sum m n f=
if m>n then 0
else if m=n then f n
else f m + sum n (m+1) f
Run Code Online (Sandbox Code Playgroud)
(虽然为了便于阅读,我通常会将最后一行用括号括起来(f m) + (sum n (m+1) f).)没有括号的情况是,它正在将它视为(f m) + (sum n m) + (1 f)产生sum n m没有int类型的错误,因为它是一个更复杂的部分函数应用程序类型.
作为一般规则,当表达式作为参数传递给函数时,它总是需要括起来.在相关的说明中,如果你真的想要将plus函数作为参数传递,你可以将它放在括号中(例如:( sum m n (+)虽然在这种情况下不会键入检查,因为+期望两个数字)).