有人告诉我Haskell没有变量而是绑定。现在这意味着什么,我总是想知道在编写这些绑定时有什么区别,如下所示:
x = 5
和
let x = 5
这有什么区别?
还有一个后续问题:我是否通过这样做创建变量?如果x不是变量,它是什么?
答案 0 :(得分:13)
唯一真正的区别在于它们发生的地方。
-- At top (file) level or in "where" blocks, omit "let".
x = 5
f1 y = x + y
where
x = 5
-- Inside expressions or do-blocks, "let" is required.
f2 y = let x = 5
in x + y
f3 y = do someAction
let x = 5
return (x + y)
在所有情况下,x
都是变量。但是,您无法更改(变更)变量的值。
在GHCi提示符中,您似乎更改了变量的值,但您不能。您只能创建具有相同名称的新变量,旧变量仍然存在。
Prelude> let x = 3 Prelude> let f y = x + y Prelude> let x = 10 Prelude> f 1 4
如果您确实更改了x
的值,则f 1
将为11。