我试图在Haskell中的函数中执行一些语句, 我在网上看了一下这个想法,如果我使用"做"我能够做到这一点。我用过它,但它仍然不适合我,如果有人可以请一看并指导我做错了什么,我刚开始使用haskell,所以它有点挣扎Haskell语法。
我的功能:
type Rod = String
Move = (Integer, Rod, Rod)
hanoi :: Integer -> Rod -> Rod -> Rod -> [Move]
hanoi n source helper destination= if n==1 then [(n source destination)] else do
(hanoi (n-1) source helper destination)
([n source destination])
(hanoi (n-1) helper destination source)
我正在努力做河内塔的问题。我想执行"做"之后的三个陈述。任何帮助将受到高度赞赏。
提前致谢!!!
答案 0 :(得分:8)
帮助你解决这个问题是一种让它编译和工作的方法(差不多):
type Rod = String
type Move = (Integer, Rod, Rod)
hanoi :: Integer -> Rod -> Rod -> Rod -> [Move]
hanoi n source helper destination =
if n==1 then
[(n, source, destination)]
else
hanoi (n-1) source helper destination
++ [(n, source, destination)]
++ hanoi (n-1) helper destination source
我改变的是:
Move
提供了一个类型(我希望你想要一个元组)(n source destination) -> (n,source,destination)
)++
现在你只需要解决操作顺序的一个小问题;)它应该打印出一个解决方案:D