了解Haskell列表理解语法的初学者帮助

了解Haskell列表理解语法的初学者帮助,haskell,syntax,Haskell,Syntax,这是我试图理解的代码 let triple = [ (a,b,c) | c <- [1..10], a <- [1..c], b <- [1..a], a^2 + b^2 == c^2] let triple=[(a,b,c)| c您可以大致将其转换为命令式伪代码,如下所示: for c in 1..10 for a in 1..c for b in 1..a if a^2 + b^2 == c^2 put (a,b,c) on end

这是我试图理解的代码

let triple = [ (a,b,c) | c <- [1..10], a <- [1..c], b <- [1..a], a^2 + b^2 == c^2]

let triple=[(a,b,c)| c您可以大致将其转换为命令式伪代码,如下所示:

for c in 1..10
  for a in 1..c
    for b in 1..a
      if a^2 + b^2 == c^2
        put (a,b,c) on end of triple
除了它将在任何使用列表的对象请求元素时懒洋洋地运行之外


列表理解实际上是列表单子之上的一个相当简单的语法糖。如果您想了解关于它们如何解释的更多信息,您可能需要查看它们。

您可以大致将其转换为命令式伪代码,如下所示:

for c in 1..10
  for a in 1..c
    for b in 1..a
      if a^2 + b^2 == c^2
        put (a,b,c) on end of triple
除了它将在任何使用列表的对象请求元素时懒洋洋地运行之外

列表理解实际上是列表单子之上的一个相当简单的语法糖。如果你想了解更多关于它们如何解释的信息,你可能想看看那里

Haskell按什么顺序计算每个表达式

一般来说,这个问题的答案是

这不关你的事

考虑Haskell程序将做什么,担心事物的求值顺序不是正确的方式。在Java中,这非常重要,因为求值可能会产生副作用。在Haskell中,求值顺序不会影响结果(请撇开奇怪的角落)

考虑列表理解的关键是考虑嵌套顺序,而不是求值顺序。列表理解中最左边的术语是最外面的术语

Haskell按什么顺序计算每个表达式

一般来说,这个问题的答案是

这不关你的事

考虑Haskell程序将做什么,担心事物的求值顺序不是正确的方式。在Java中,这非常重要,因为求值可能会产生副作用。在Haskell中,求值顺序不会影响结果(请撇开奇怪的角落)

考虑列表理解的关键是考虑嵌套顺序,而不是求值顺序。列表理解中最左边的术语是最外面的术语