在同一个函数中执行多个命令(Haskell)

时间:2016-01-13 14:21:22

标签: haskell

我试图在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)

我正在努力做河内塔的问题。我想执行"做"之后的三个陈述。任何帮助将受到高度赞赏。

提前致谢!!!

1 个答案:

答案 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