compress
是一个删除列表元素的连续重复项的函数。
compress (x:ys@(y:_))
| x == y = compress ys
| otherwise = x : compress ys
compress ys = ys
现在,不是 x:ys
与 y:_
的模式相同在(x:ys@(y:_))
?如果是,那么这个函数如何正确执行?
最佳答案
不,它们不一样。 @ 符号用于为参数命名并与 @ 符号后面的模式进行匹配。
在您的示例中,ys
是 (y:_)
的同义词。将其写为 (x:(ys@(y:_)))
会更清晰。 x
是列表的第一个元素,y
是列表的第二个元素,ys
是没有第一个元素的列表 x
.
关于algorithm - Haskell "as patterns"算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074928/