有人能为我解释一下这段代码吗?
[ x*y | x <- [2,5,10], y <- [8,10,11], x*y > 50]
我不理解在Haskell中的这个|符号的含义。
有人能为我解释一下这段代码吗?
[ x*y | x <- [2,5,10], y <- [8,10,11], x*y > 50]
您应该将其阅读为“where”或“such 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]
符号'|'在数学(集合论)中与符号'∣'具有相同的含义,只需将其读作“such that”。在数学中,符号'|'有时被代替为':'。
符号'<-'可读作“is drawn from”
表达式x <- [2,5,10]被称为生成器。一个列表推导式可以有多个生成器,连续的生成器之间用逗号分隔。
列表推导式还可以使用称为过滤器的逻辑表达式来过滤先前生成器产生的值。如果过滤器为True,则当前值将保留,如果为False,则将丢弃这些值。例如,推导式[x | x <- [1..10], even x]
从列表[1..10]
中产生所有偶数的列表[2,4,6,8,10]
。
希望这样能帮助您理解列表推导式中符号'|'和'<-'的含义。
|
理解为在以下条件下:
。
|
符号,被称为 列表推导式。 - user2864740