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...]
我觉得你正在尝试将命令式算法直接转换为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)