我有这段代码可以调整河内运动并将它们作为列表返回。到目前为止这是有效的。
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) = []
但它不起作用。好像我在完全理解模式匹配的概念时遇到了问题。但我找不到很多有用的资源。
提前致谢!
答案 0 :(得分:5)
一般来说,你不会检查这个,因为start=ziel
不是模式 - 模式是(大部分)值或特殊模式,如_
或变量名,而start = ziel
是一个未完全评估的表达式。
相反,模式匹配以提取start
和ziel
,然后您可以使用if语句或根据start = ziel
执行不同的操作。
例如:
| hanoi(anz, start, ziel) = if start = ziel
then ...
else ...
或
| hanoi(anz, start, ziel) = case start = ziel of
true => ...
| false => ...
这两个选项做同样的事情 - 使用的是风格决定。