gpt4 book ai didi

haskell - 将名称绑定(bind)到值与将值分配给变量

转载 作者:行者123 更新时间:2023-12-02 14:27:43 24 4
gpt4 key购买 nike

阅读 Bartosz Milewski 的文章 fpcomplete他写道:"In Haskell you never assign to a variable, instead you bind a name to a value."

有人可以向我解释这意味着什么,以及它在函数式编程世界中的实际影响吗?

最佳答案

从某种意义上说,唯一真正的区别是命令式语言中的变量可以更改,而函数式语言中的绑定(bind)名称则不能。但我认为了解两者之间更高层次的语义区别以及我们如何以不同的方式思考它们非常重要。

在命令式语言中,变量本身就是一个恰好包含值的东西。它们经常被比作装有东西的盒子。盒子里的内容可以改变,从语义上讲,盒子有自己的身份。

另一方面,Haskell 名称只是值的标签。您可以完全互换地使用其中之一。至关重要的是,他们无法改变

将 Haskell 中的绑定(bind)与 Java 等语言中的函数名称进行比较。这些也无法改变,你也不会自己想到它们;它们只是它们所附加的方法的名称。

这是一个人为的差异示例:想象一个函数 f 关闭命令变量 x:

var x = 7;
function foo() {
console.log(x);
}

实际上,x 只是 7 的名称...直到 x 发生变化。您关闭的是变量 x,而不是其值7,因此如果它发生变化,foo 的行为也会发生变化.

另一方面,在 Haskell 中,如果将 7 绑定(bind)到名称 x 并关闭它,则与仅关闭 7

let x = 7 in \ () -> x

做同样的事情

\ () -> 7

(它本身除了执行 7 之外什么也不做,忽略了严格性问题)。

1 忽略反射和类似的恶作剧

关于haskell - 将名称绑定(bind)到值与将值分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27830405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com