为什么在列表推导式中并不总是使用绘制值?



在Haskell中,如果我想重复一个值,我可以用以下形式编写一个列表推导式:

repeat_value x n = [x | _ <- [1..n]]

为什么我可以使用生成器将其值放入从未使用过的变量_中?

在语法上,x <- gen是一个重复的模式匹配操作。对于生成器提供的每个值,它都与模式x匹配,并使用可能暗示的任何绑定。对于每个成功的模式匹配,计算一个表达式以生成一个值添加到正在构建的列表中。例如,您可以将[x | Just x <- [Just 1, Nothing, Just 2]]写成[1, 2]

在你的例子中,你不需要用如此复杂的模式来解构值;你只需要生产它们。可以将它们与不可辩驳的模式(如y)匹配,但是y不会在左侧的表达式中使用,那么为什么要绑定到名称呢?您可以使用特殊的不可辩驳模式_

最新更新