algorithm - Haskell "as patterns"算法

标签 algorithm haskell pattern-matching

compress是一个删除列表元素的连续重复项的函数。

compress (x:ys@(y:_))
    | x == y    = compress ys
    | otherwise = x : compress ys
compress ys = ys

现在,不是 x:ysy:_ 的模式相同在(x:ys@(y:_)) ?如果是,那么这个函数如何正确执行?

最佳答案

不,它们不一样。 @ 符号用于为参数命名并与 @ 符号后面的模式进行匹配。

在您的示例中,ys(y:_) 的同义词。将其写为 (x:(ys@(y:_))) 会更清晰。 x 是列表的第一个元素,y 是列表的第二个元素,ys 是没有第一个元素的列表 x.

关于algorithm - Haskell "as patterns"算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41074928/

相关文章:

c - 实现基于整数的幂函数 pow(int, int) 的最有效方法

haskell - 如何计算 Haskell 中元组的长度?

haskell - 如何将外部导出函数的参数传递到管道中?

generics - scala 类型匹配

模式匹配 Map[String, Int] 中的 Scala 类型删除

algorithm - N个矩形的交集

algorithm - 约瑟夫斯谜题的线性变化

java - 从包含文件名的字符串中提取模式

c++ - 如何解决 0-1 背包算法的这些变体?

haskell - Haskell 中缓存了哪些函数?