我正在尝试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)
类型为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 -> a你n的整数.随后,而不ceiling的第二个参数any是Floating t => [t].这会打破,因为在非整数类型上调用mod其Integral a => a -> a -> a类型是非法的.
如果您想寻找其他一些实现,我可以推荐这样的讨论.