我刚刚说过学习 Haskell 有关过滤列表的内容。假设我有以下列表:[2, 3, 4, 5, 8, 10, 11]
我只想保留列表中的那些数字,这些数字不能被其他成员整除。
我们的例子的结果是:[2, 3, 5, 11]
[x | x <- src, all (\y -> x `rem` y /= 0) (filter (<x) src)]
where src = [2,3,4,5,8,10,11]
Run Code Online (Sandbox Code Playgroud)
应该注意的是,您实际上还意味着可以被它下面的其他数字整除,而不仅仅是该列表中的任何数字,这就是为什么 的filter第二个参数中有 a all。
当然,结果就是您在问题中所期望的结果:[2,3,5,11]。
这是它的工作原理(如果我遗漏了任何内容,请告诉我,我会更新)。
我将用普通英语并排解释代码。我建议你先看英文,然后看看每条语句是如何用代码表达的——我认为这对新手来说应该是最友好的。另请注意,我翻转了和下面
的参数(这是无效的!)以使解释更加流畅。filterall
[x|x
x <- src: 构造一个由:构成的列表,其中x是来自 : 的元素src
,,但只有满足以下谓词/规则: 的元素:小于当前:
all的数字不得产生等于 0 的余数。
(filter src (<x))srcx
(\y -> x 'rem' y /= 0)
]
为了使代码部分有意义,请确保您熟悉all、filter、rem以及以下语法:列表推导式、lambda 表达式、节和反引号。
| 归档时间: |
|
| 查看次数: |
6217 次 |
| 最近记录: |