简单的OCaml练习

Tor*_*rus 4 ocaml

我正试图通过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)

但它不起作用,产生类型错误.

Kei*_*win 7

你需要一些括号.

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 (+)虽然在这种情况下不会键入检查,因为+期望两个数字)).


Jef*_*eld 6

函数应用程序(函数名称与其参数的绑定)在OCaml中具有最高优先级.所以,你需要看你的括号.我没有给出解决方案,因为自己弄清楚它可能会更有趣.