繁体   English   中英

F#让绑定模式

[英]F# let binding patterns

这个问题在stackoverflow中并不新鲜,但我无法理解let与模式和in关键字绑定的行为。 我的教科书更喜欢不常见的函数定义格式:

let foo = fun x -> let f = (fun x y -> x +y ) in f x    

所以我翻译了#light语法:

let foo x =
    let f y =
        x + y
    f x

如果我设置foo 4它会返回8 为什么? 我无法理解函数内部实际发生了什么,即使这里有优雅的解释。 为什么4成为xy参数?

你在另一个函数中定义一个函数,你的内部函数f从外部函数中捕获一个值,在x + y使用的值x使得x变为4。

然后你调用内部函数fxx传递给y ,它也是4。

另一种查看它的方法,没有考虑具体的值4,你的内部函数是let fy = x + y但是它总是用x调用,所以y变成x ,那么你的函数变成let fa = a + a

理解这一点的关键是函数可以从上下文中捕获值,在本例中为x

因此,这解释了使用light语法的函数的行为,但您可能想知道为什么它与单行版本不同。 这是因为翻译错了。 这是正确的翻译:

let foo x =
    let f x y = 
        x + y
    f x

现在如果你用foo 4调用它,它会返回一个期望另一个参数的函数。

假设我们用4调用函数foo。

let foo x =
    let f y =
        x + y
    f x

foo 4

我们可以用函数foo替换foo 4 ,将所有x替换为4。

let f y =
    4 + y

f 4

现在我们可以用函数f替换f 4 ,其中y := 4

4 + 4

这显然是8。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM