这一行F#snippet
的含义是什么?let x x = x + 2 in x 2;;
有效,只返回4.
但它是什么?是一个函数?它也是一个参数吗? x也似乎在调用自己(x 2),但它没有标记为“rec”。
任何人都可以解释一下吗?
答案 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 off
(on
是默认值),您可以了解有关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
因此它定义了一个函数,它增加了两个并将其应用于两个以获得四个。