有人可以向我解释这个编码。
[ x*y | x <- [2,5,10], y <- [8,10,11], x*y > 50]
我不明白这个的含义 | 哈斯克尔中的符号
你应该把它读成"where"或"这样"——
-- 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]
符号"|"与数学(集合论)中的符号"|"具有相同的含义。你只是应该像"这样"一样阅读它。在数学中,符号"|"有时会被替换为":"。
符号"<-"读作"取自"。
表达式 x <- [2,5,10] 称为生成器。列表推导可以有多个生成器,连续生成器用逗号分隔。
列表推导式还可以使用称为守卫的逻辑表达式来筛选早期生成器生成的值。如果守卫为 True,则保留当前值,如果为 False,则丢弃这些值。例如,推导[x | x <- [1..10], even x]
生成列表[2,4,6,8,10]
列表[1..10]
中的所有偶数。
希望它能帮助您理解列表推导中符号"|"和"<-"的含义。
翻译成英语是这样的
一个列表,其元素的形式为
x*y
,使得x
是[2,5,10]
的元素,y
是[8,10,11]
的元素,x*y
大于 50。
|
符号在这里是列表推导语法的一部分;它不是运算符或其他任何具有独立含义的东西,它只是用于将正在定义的列表元素的表达式(在本例中为x*y*
部分)与生成器和过滤器(x <- [2,5,10], y <- [8,10,11], x*y > 50
部分)分开。在翻译成英文时,我将|
符号翻译为"这样";"哪里"也很常见。
编写列表推导的语法受到数学中集合推导的启发;在该页面上的示例中,您可以清楚地看到一个垂直条,用于将集合元素的形式与元素的条件分开。
我宁愿认为这里的|
是under these condition: