关于这种奇怪的语言,我觉得自己好像缺少了一些重要的基础知识。
考虑以下程序。
let q f x = f x x;;
let s = q (+);;
如果我用OCaml运行这个程序,我得到:
val q : ('a -> 'a -> 'b) -> 'a -> 'b = <fun>
val s : int -> int = <fun>
与我见过的其他OCaml代码相比 这个程序的语法对我来说很奇怪。在第一行,将q设置为f x x做什么?q(+)也是做什么的(希望我明白了第一部分就能明白)?任何帮助理解这段代码都会有帮助。
你可能忽略了一个事实,即空格是函数的应用。
用括号表示参数的情况下,你得到的结果是
q(f,x) = f(x,x)
s(n) = q(plus, n)
plus(k,l) = k + l
(+)
是函数的快捷方式,该函数以 x
和 y
并返回 x + y
,你可以写成 (+) x x
也是。
在你的情况下 q (+)
是函数
fun x -> x + x