OCaml语法:变量并列式

问题描述 投票:0回答:1

关于这种奇怪的语言,我觉得自己好像缺少了一些重要的基础知识。

考虑以下程序。

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(+)也是做什么的(希望我明白了第一部分就能明白)?任何帮助理解这段代码都会有帮助。

syntax ocaml
1个回答
1
投票

你可能忽略了一个事实,即空格是函数的应用。

用括号表示参数的情况下,你得到的结果是

q(f,x)    = f(x,x)
s(n)      = q(plus, n)
plus(k,l) = k + l

(+) 是函数的快捷方式,该函数以 xy 并返回 x + y,你可以写成 (+) x x 也是。

在你的情况下 q (+) 是函数

fun x -> x + x
© www.soinside.com 2019 - 2024. All rights reserved.