SML - 如何检查模式匹配中的2个参数是否相同?

时间:2014-04-28 13:45:53

标签: parameters pattern-matching sml

我有这段代码可以调整河内运动并将它们作为列表返回。到目前为止这是有效的。

fun hanoi(0,start,ziel) = []
  | hanoi(1,start,ziel) = [(1,start,ziel)]
  | hanoi(anz,start,ziel) = hanoi(anz-1,start,hilf(start,ziel)) 
                   @ ((anz,start,ziel)::hanoi(anz-1,hilf(start,ziel),ziel))
and hilf(start,ziel) = 6-(start+ziel);

现在我的问题是如何检查开始和目标(德语:ziel)相同的最后模式?我试过这样的事情:

|hanoi(anz,start,ziel=start) = []

但它不起作用。好像我在完全理解模式匹配的概念时遇到了问题。但我找不到很多有用的资源。

提前致谢!

1 个答案:

答案 0 :(得分:5)

一般来说,你不会检查这个,因为start=ziel不是模式 - 模式是(大部分)值或特殊模式,如_或变量名,而start = ziel是一个未完全评估的表达式。

相反,模式匹配以提取startziel,然后您可以使用if语句或根据start = ziel执行不同的操作。

例如:

| hanoi(anz, start, ziel) = if start = ziel
                            then ...
                            else ...

| hanoi(anz, start, ziel) = case start = ziel of
                              true => ...
                            | false => ...

这两个选项做同样的事情 - 使用的是风格决定。