【发布时间】:2014-10-17 06:40:57
【问题描述】:
我正在尝试编写一个程序来解决 Prolog 中的河内塔问题。这里的帖子都没有帮助我,所以我决定自己问。我已经编写了以下代码。它适用于 2 个磁盘,但会进入 3 个无限循环。
hanoi(1,A,B,_,[(A,B)]).
hanoi(X,A,B,C,Y):-
hanoi(X2,A,C,B,Y1),
hanoi(1,A,B,_,[Y2]),
hanoi(X2,C,B,A,Y3),
append(Y1,[Y2|Y3],Y),
X2 is X-1.
调用方式如下:
?- hanoi(3, a, b, c, Y).
a,b,c 是钉子。 3 是磁盘的数量,X 是我们想要的结果。
我需要在 Y 中得到结果。我正在尝试使用 2 递归地找到 X-1 圆盘从 peg 1 到 3 的移动,1 个圆盘从 peg 1 到 2,X-1 圆盘从 peg 3 到2 并附加它们。我不明白我做错了什么。任何帮助或指导将不胜感激!谢谢!
【问题讨论】:
-
这些参数是什么意思?哪些必须实例化为什么类型的术语?或者:告诉我们你如何称呼这个谓词。