在haskell中创建一个可分整数列表

Mr.*_*azl 1 haskell

我是haskell的新手,我正在尝试创建一个表达式,它给出了一个从0到n的整数列表,它可以被3整除.我写的脚本不起作用,我不知道是什么原因.

zeroto :: Int -> [Int]
zeroto n = [x | x <- [0..n]]
           where
             x "mod" 3 == 0
Run Code Online (Sandbox Code Playgroud)

Ada*_*ith 8

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)