如何使用haskell中的范围,元素之间的距离可变

cHa*_*Ham 3 haskell list-comprehension

我启动了以下代码片段,我不确定我的错误在哪里.目标是传入两个值,val并fac输出表单列表[val1, val1*fac,val1*fac*fac...]但不起作用.

 gm :: Int -> Int -> [Int]
 gm val fac = let j=0 in
[ if (x==val) then x else if (x==(val+1)) then k else j 
| x <- [val..], let k = val*fac, let j = fac*k]
Run Code Online (Sandbox Code Playgroud)

例如,如果我打电话给gm 2 3我应该得到结果,[2,6,18,54,162...]但我得到的是[2,6,18,18,18...]

Dan*_*kov 5

我觉得你正在尝试将命令式算法直接转换为Haskell.定义这种无限列表的标准方法是使用惰性和递归:

gm val fac = val : gm (val * fac) fac
Run Code Online (Sandbox Code Playgroud)

如果你想使用列表理解:

gm val fac = [val * fac^i | i <- [1..]]
Run Code Online (Sandbox Code Playgroud)