Haskell'任何'功能 - 素性检查

S0r*_*rin 4 haskell

我正在尝试is_prime在Haskell中定义一个函数.任何人都可以指出使用任何功能的问题?

另外,我知道下面的代码是天真的,但我正在学习语言,所以从babysteps开始.

is_prime 0 = False
is_prime 1 = False
is_prime 2 = True
is_prime n = any [n `mod` k == 0 | k <- [2.. sqrt n]]
Run Code Online (Sandbox Code Playgroud)

Jan*_*Jan 7

类型为anyis (a -> Bool) -> [a] -> Bool,因此它接受谓词和集合.所以你应该重写你的最后一个案例

is_prime n = not $ any (\k -> n `mod` k /= 0)
                       [2 .. ceiling $ sqrt $ fromIntegral n]
Run Code Online (Sandbox Code Playgroud)

fromIntegral是必要的,因为sqrt类型是Floating a => a -> an的整数.随后,而不ceiling的第二个参数anyFloating t => [t].这会打破,因为在非整数类型上调用modIntegral a => a -> a -> a类型是非法的.

如果您想寻找其他一些实现,我可以推荐这样的讨论.