如何使用过滤器从Haskell中的列表中过滤出特定数字的所有倍数

Slu*_*ger 2 haskell pointfree

我知道我可以创建一个函数来执行此操作,但我可以使用前奏中的过滤器函数.我可以轻松过滤所有大于3的数字,例如从列表中使用

filter (>3) [list]
Run Code Online (Sandbox Code Playgroud)

但我想要类似的东西

filter (not (.. `mod` 4 == 0)) [list]
Run Code Online (Sandbox Code Playgroud)

过滤掉所有四倍的倍数.我把..放在这里,因为我不知道那里有什么.有什么方法可以使用过滤器功能这样做,还是我应该自己做功能呢?提前致谢

chi*_*chi 7

你几乎在那里:

filter (\n -> not (n `mod` 4 == 0)) [list]
Run Code Online (Sandbox Code Playgroud)

\n读"拉姆达N",并介绍了一个匿名函数.即,给定n测试的函数是否不是倍数4.

否则,您可以使用"pointfree"样式,在其中组成多个函数:

filter (not . (== 0) . (`mod` 4)) [list]
Run Code Online (Sandbox Code Playgroud)

函数读取为:取输入,减去模数4,然后测试结果是否等于0,最后否定这种测试的结果.

请注意,您也可以使用/= 0而不是== 0否定.