如何在SML的函数定义中编写多条指令

时间:2015-04-17 21:38:42

标签: function sml towers-of-hanoi

我想通过SML运行Hanoi算法,所以我使用了以下类似C的代码:

fun Hanoi 1 source dest by = print ("Move the plate from"^source^"to"^dest^"/n")
| n source dest by = Hanoi n-1 source by dest 
    print ("Move the plate from"^^source^^"to"^^dest^^"/n")
    Hanoi n-1 by dest source

这段代码出了问题。我的猜测是,由于它有多个指令,我没有正确编写算法的n个案例。 无论如何,我真的很感谢你的帮助。 如果可以,请理解我是ML中的一个完全业余的编码器,这意味着我对它的工作方式知之甚少。

1 个答案:

答案 0 :(得分:0)

ML中没有“指令”,只有表达式。分号运算符允许按顺序评估多个表达式。这应该编译:

fun hanoi 1 source dest by =
    print ("Move the plate from"^source^"to"^dest^"/n")
  | hanoi n source dest by =
    (hanoi (n-1) source by dest;
     print ("Move the plate from"^source^"to"^dest^"/n");
     hanoi (n-1) by dest source)

请注意,您需要使用分号括起来。你还需要围绕n-1的parens,因为中缀运算符的优先级低于函数应用程序。