我是haskell的新手,我正在尝试创建一个表达式,它给出了一个从0到n的整数列表,它可以被3整除.我写的脚本不起作用,我不知道是什么原因.
zeroto :: Int -> [Int]
zeroto n = [x | x <- [0..n]]
where
x "mod" 3 == 0
Run Code Online (Sandbox Code Playgroud)
where不是这样的.它不是过滤器 - 它是本地范围的定义.
但是,列表理解确实允许过滤器,您只是没有把它放在正确的位置.
zeroto :: Int -> [Int]
zeroto n = [x | x <- [0..n], x `mod` 3 == 0]
Run Code Online (Sandbox Code Playgroud)
或者,您可以在where块中定义过滤器函数并在之后过滤,但这有点愚蠢.
zeroto :: Int -> [Int]
zeroto n = divisibleByThree [0..n]
where divisibleByThree = filter (\x -> x `mod` 3 == 0)
Run Code Online (Sandbox Code Playgroud)