一行F#代码很难理解

时间:2013-09-12 00:42:11

标签: f# ocaml

这一行F#snippet

的含义是什么?
let x x = x + 2 in x 2;;

有效,只返回4.

但它是什么?是一个函数?它也是一个参数吗? x也似乎在调用自己(x 2),但它没有标记为“rec”。

任何人都可以解释一下吗?

3 个答案:

答案 0 :(得分:7)

让我们试着了解会发生什么。

let x x

定义了一个名为x的函数,该函数的参数为​​x

`let x x = x + 2`

表示你有一个函数x,它接受​​一个名为x的参数并返回x+2

最后一部分in x 2使用参数2调用该函数。

因此该函数可以写成

let f x = x + 2
f 2

显然会返回4。

答案 1 :(得分:7)

'in'表示它没有使用轻型语法。基本上,in表示先前绑定是针对以下表达式定义的。由于in关键字表示x的绑定对以下表达式有效,因此编写它的另一种方法是将x替换为绑定的值,如下所示:

(fun x -> x + 2) 2

我认为重要的是要意识到所有绑定都以这种方式工作,即绑定是一种以更易理解的方式编写表达式的方式。

如果您查看here,如果您指定了#light offon是默认值),您可以了解有关F#可用的OCaml语法的更多信息。

答案 2 :(得分:2)

let x x = x + 2 in x 2;;

通过将外部x重命名为f来消除变量的歧义:

let f x = x + 2 in f 2;;

缩进:

let f x =
  x + 2
f 2

因此它定义了一个函数,它增加了两个并将其应用于两个以获得四个。