我需要根据两个输入生成一个无限列表。
gen :: Int -> Int -> [Int]
gen x y
每个元素都需要是 (x*y) 并且 x 每次迭代都会增加 y 并且原始 x 也必须在列表中。所以
gen 2 4
会导致
[2,8,24,40,..]
我所有的尝试最终都会永远进行(我在 ghci 中使用调用“take 4 (gen 2 4)”)所以我不知道如何继续。无限列表只会给我带来很多麻烦。我正在尝试通过 do-notation 和 list monad 来做到这一点。任何在正确方向上的帮助将不胜感激。
编辑
这是我最后一次没有成功的尝试。我正在通过我的朋友学习 Haskell,他给了我这个问题来学习 list monad 的 do 表示法。
gen :: Int -> Int -> [Int]
gen x y =
do
a <- [x..]
guard $ mod a (x*y) == 0
let x = x+y
return a