List 可被Y和Z除的整数的输出列表Haskell

List 可被Y和Z除的整数的输出列表Haskell,list,haskell,List,Haskell,我正在尝试编写一个函数,它将输出一个可以被Y和Z从1到500整除的整数列表。然而,我得到了一个空列表。我做错了什么 divisByYnZ :: Int -> Int -> [Int] divisByYnZ y z = [x | x <- [1..500], y `mod` 2 == 0 && z `mod` 2 == 0] 如果mod x y==0,则数字x可被数字y整除。如果您希望数字可以被y整除,那么您应该将过滤器y`mod`2==0重写为x`mod`y=

我正在尝试编写一个函数,它将输出一个可以被Y和Z从1到500整除的整数列表。然而,我得到了一个空列表。我做错了什么

divisByYnZ :: Int -> Int -> [Int]
divisByYnZ y z = [x | x <- [1..500], y `mod` 2 == 0 && z `mod` 2 == 0]
如果mod x y==0,则数字x可被数字y整除。如果您希望数字可以被y整除,那么您应该将过滤器y`mod`2==0重写为x`mod`y==0,这里x毕竟是您要过滤的数字,或者更紧凑的mod xy==0

因此,我们可以将其改写为:

divisByYnZ y z = [x | x <- [1..500], mod x y == 0, mod x z == 0]
用最小公倍数组合两个模检验 一个数可被两个数A和b整除,当且仅当它可被最小公倍数LCM整除。在Haskell中,前奏曲有一个计算最小公倍数的函数。因此,我们可以将列表改写为:

-- given y and z are strictly positive
divisByYnZ y z = [t, t+t..500]
    where t = lcm y z
你为什么在这里写y`mod`2?
-- given y and z are strictly positive
divisByYnZ y z = [t, t+t..500]
    where t = lcm y z