在Haskell中,使用和不使用let有什么区别?

时间:2017-02-22 23:01:15

标签: haskell

有人告诉我Haskell没有变量而是绑定。现在这意味着什么,我总是想知道在编写这些绑定时有什么区别,如下所示:

x = 5

let x = 5

这有什么区别?

还有一个后续问题:我是否通过这样做创建变量?如果x不是变量,它是什么?

1 个答案:

答案 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。