【发布时间】:2015-01-20 10:48:52
【问题描述】:
我是 Haskell 的新手并编写了以下小代码,但它因循环异常而失败。问题是代码不使用循环,甚至递归。 这让我发疯了!
gameList :: [Int]->Int->Int->[(Int, Int)]
gameList org pos step =
let next = (mod (pos + step) 2) ;
pos = next;
in [(pos, pos)]
然后将其保存在一个文件中,并以交互模式成功将其加载到 GHC 中。
像这样调用它
gameList [1,2,3] 0 1
它会抛出错误“[(***异常:”
GHCI 信息:WinGHCi 1.0.6 帮帮我!
【问题讨论】:
-
这里无限循环,因为
pos是您的论据之一。你想做什么?gameList [1,2,3] 0 1的预期输出是什么? -
顺便说一句,你通常不需要在 Haskell 中用分号结束行,也不需要用括号包围定义。
-
原因是let表达式不是赋值,是块代码的定义。在这种情况下,它是递归的。与下面代码相同的情况: let t = (let pos = next; next = pos in (pos, next))