c-p*_*pid 2 parameters sml pattern-matching
我有这段代码来制作河内运动并将它们作为列表返回.这项工作到目前为止.
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);
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何检查开始和目标(德语:ziel)相同的最后模式?我试过这样的事情:
|hanoi(anz,start,ziel=start) = []
Run Code Online (Sandbox Code Playgroud)
但它不起作用.好像我在完全理解模式匹配的概念时遇到了问题.但我找不到很多有用的资源.
提前致谢!
一般来说,你不检查这个,因为start=ziel不是模式 - 模式是(大多数情况下)值或特殊模式,如_或变量名,start = ziel而是一个未完全评估的表达式.
相反,模式匹配以提取start和ziel,然后您可以使用if语句或使用if语句来执行不同的操作,具体取决于是否start = ziel.
例如:
| hanoi(anz, start, ziel) = if start = ziel
then ...
else ...
Run Code Online (Sandbox Code Playgroud)
要么
| hanoi(anz, start, ziel) = case start = ziel of
true => ...
| false => ...
Run Code Online (Sandbox Code Playgroud)
这两个选项做同样的事情 - 使用哪个是风格决定.