1

我正在尝试为 CS 家庭作业找出这个问题(我将其标记为家庭作业,我只需要朝着正确的方向迈出一步)。编辑:显然“家庭作业”标签已过时,不再使用。无论如何,我必须在 Prolog 中编写一个规则定义,确定给定的移动列表可以解决塔。我知道说明不好,我的教授很不清楚,但我所拥有的就是必须满足以下条件:

?- hanoi(1,l,c,r,[[l,r]]).
true.

?- hanoi(1,l,c,r,[[c,r]]).
false.

?- hanoi(2,l,c,r,[[l,c],[l,r],[c,r]]).
true.

?- hanoi(3,l,c,r,M).
M = [[l,r], [l,c], [r,c], [l,r], [c,l], [c,r], [l,r]].

我一点也不知道上述任何内容应该暗示我做什么,所以任何指导都将不胜感激!它不会让我这样标记它,但是,就像我说的,这是一个家庭作业问题(尽管考虑到缺乏解释,这似乎是一个非常困难的问题),所以我不一定想要一个我想要的答案准确了解正在发生的事情。

非常感谢大家!!

4

1 回答 1

1

假设您知道问题所在,那么该表示的含义如下:

hanoi(1,l,c,r,[[l,r]]).

这显然意味着在初始状态左塔上有一个元素。l、c 和 r 是塔的名称。最后一个论点是解决方案。解决方案是移动列表。每一步都是一对[你从哪里得到元素,你把它放在哪里]。所以在前面的原子中,编码的解决方案是:将左塔上的元素移动到右塔上。

hanoi(1,l,c,r,[[c,r]]).

这失败了,因为解决方案是错误的。初始状态只有左塔上的元素,因此如果中央塔不存在,则无法将其从中央塔中移出。

hanoi(2,l,c,r,[[l,c],[l,r],[c,r]]).

这是通过三个动作解决的:从左到中心,从左到右,从中心到右。最后一个查询也是一样。

于 2012-10-18T10:10:17.917 回答