在Haskell中,如果我想重复一个值,我可以用以下形式编写一个列表推导式:
repeat_value x n = [x | _ <- [1..n]]
为什么我可以使用生成器将其值放入从未使用过的变量_
中?
在语法上,x <- gen
是一个重复的模式匹配操作。对于生成器提供的每个值,它都与模式x
匹配,并使用可能暗示的任何绑定。对于每个成功的模式匹配,计算一个表达式以生成一个值添加到正在构建的列表中。例如,您可以将[x | Just x <- [Just 1, Nothing, Just 2]]
写成[1, 2]
。
在你的例子中,你不需要用如此复杂的模式来解构值;你只需要生产它们。可以将它们与不可辩驳的模式(如y
)匹配,但是y
不会在左侧的表达式中使用,那么为什么要绑定到名称呢?您可以使用特殊的不可辩驳模式_
。