Haskell运算符解释

时间:2017-11-09 02:18:48

标签: haskell syntax

我在Haskell中遇到过以下内容:foldl (&&) True [False | _ <- [1..]]。我知道foldl函数做了什么,这个表达式涉及无限递归,但这个表达式实际意味着什么?我主要不确定|<-在这种情况下做了什么。

3 个答案:

答案 0 :(得分:5)

这是应用于三个参数的foldl函数:

  1. (&&)
  2. True
  3. [False | _ <- [1..]]
  4. 第三个参数是由列表推导定义的列表。它只是False值的无限序列:列表使用False值构建,每个值_从无限序列1,2,3中拉出....它可以更简单地定义为repeat False

    foldl (&&) True (repeat False) 
    

答案 1 :(得分:1)

请阅读the haskell wiki about list-comprehension

这:[ expr | expr <- expr ]是一种名为list-comprehension的语法。

_表示忽略此变量,|用于分隔列表推导表达式的左右部分。

答案 2 :(得分:1)

foldl运算符通过遍历列表并在累加器上调用二元运算符和列表中的当前位置来累积值。

即。 (&amp;&amp;)表示我们使用AND运算符累积值TRUE。

现在是最后一部分。这是列表理解。它类似于您在数学课程中看到的设置符号。基本上我们正在定义一个列表,|意味着和_&lt; - [1 ..]意味着我们将每个值从1加载到无穷大,但是因为我们将它加载到_中,所以它被忽略了。这定义了一个无限的False列表,因此在第一次折叠时我们将返回false,因为True&amp;&amp;假总是错误的。

我认为这与函数all相同。