这个符号是什么|在哈斯克尔意味着

时间:2014-01-22 09:02:05

标签: haskell haskell-platform

有人可以向我解释这个编码。

[ x*y | x <- [2,5,10], y <- [8,10,11], x*y > 50]

我不明白这个|的含义哈斯克尔的象征

4 个答案:

答案 0 :(得分:10)

你应该把它读作“where”或“that that” -

-- x * y where x is from [2,5,10] and y is from [8,10,11] and x * y > 50
[  x * y   |   x    <-   [2,5,10],    y    <-   [8,10,11],    x * y > 50]

或者,如果您熟悉Python及其列表推导,您可能会将其视为“for”

-- [x * y for x in [2,5,10] for y in [8,10,11] if x * y > 50]
   [x * y  |  x <- [2,5,10],    y <- [8,10,11],   x * y > 50]

答案 1 :(得分:3)

英语翻译就像

  

其元素的格式为x*y的列表,x[2,5,10]的元素,y[8,10,11]的元素,并且x*y大于50。

|符号是list comprehensions语法的一部分;它不是一个运算符或其他任何具有独立含义的东西,它只是用于将所定义列表的元素(在本例中为x*y*部分)的表达式与生成器和过滤器({{1})分开。部分)。在翻译成英文时,我将x <- [2,5,10], y <- [8,10,11], x*y > 50符号渲染为“这样”; “哪里”也很常见。

编写列表推导的语法的灵感来自set comprehensions在数学中的写法;在该页面的示例中,您可以清楚地看到用于将集合元素的形式与元素上的条件分开的垂直条。

答案 2 :(得分:2)

符号'|'与符号'|'具有相同的含义在数学(集合论)。你应该像'那样'来读它。在数学中符号'|'有时会被':'取代。

符号'&lt; - '读作'从'绘制'。

表达式x&lt; - [2,5,10]称为生成器。列表推导可以有多个生成器,连续的生成器用逗号分隔。

列表推导也可以使用称为保护的逻辑表达式来过滤早期生成器生成的值。如果一个保护为True,则保留当前值,如果为False,则丢弃它们。例如,理解[x | x <- [1..10], even x]生成列表[2,4,6,8,10]中所有偶数的列表[1..10]

希望它能帮助你理解符号'|'的含义列表推导中的'&lt; - '。

答案 3 :(得分:1)

我更愿意将|视为under these condition: