首页 > 解决方案 > OCaml 语法:变量并排

问题描述

我觉得我错过了关于这种奇怪语言的一些重要基础知识。

考虑以下程序:

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 设置为 fxx 有什么作用?q (+) 也有什么作用(希望如果我得到第一部分,我能理解这一点)?理解此代码的任何帮助都会有所帮助。

标签: syntaxocaml

解决方案


您可能错过了空间是函数的应用这一事实。

用括号表示参数,您所拥有的是

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

推荐阅读