在Haskell中,“ let x = 5”和“ x = 5”有什么区别?


回答 1:

x = 5可以是

  • 顶层声明let表达式或where块中的局部声明
x = 5-顶层声明foo =-愚蠢的示例函数,将5加divs再乘以2,使y = 2 x = 5 in(/ y)。 (+ x)​​foo =(/ y)。 (+ x)​​其中y = 2 x = 5

令x = 5可以是

  • let表达式的开头(请参见上文),列表理解中的局部声明,do-notation块中的局部声明。

它不能是顶级声明。

最后一点常常使Haskell的新手感到困惑,因为如果他们在GHCi shell中工作,他们必须输入let x = 5而不是x = 5。 但这是因为GHCI的工作原理是将每个键入的行包装在一个隐式的let中,这样您以交互方式键入到GHCi中的代码将成为一个长嵌套的let表达式。 结果,键入CHCi的代码将不遵循与常规Haskell代码完全相同的格式。