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

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)

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

提前致谢!

qap*_*hla 5

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

相反,模式匹配以提取startziel,然后您可以使用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)

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