5

这一行 F# 代码片段是什么意思

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

它是有效的,只返回 4。

但它是什么?是 xa 函数吗?它也是一个参数吗?x 似乎也在自称 (x 2) 但它没有标有“rec”。

谁能解释一下?

4

3 回答 3

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。

于 2013-09-12T00:46:56.847 回答
7

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

(fun x -> x + 2) 2

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

如果你看这里,你可以了解更多关于更多类似 OCaml 的语法 F# 如果你已经#light off指定(on是默认值)。

于 2013-09-12T04:37:04.813 回答
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

所以它定义了一个函数,将两个相加并将其应用于两个得到四个。

于 2013-09-20T23:21:06.927 回答