Prolog 序言中的河内塔

Prolog 序言中的河内塔,prolog,towers-of-hanoi,Prolog,Towers Of Hanoi,我正试图为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]

我正试图为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]].
我一点也不知道上面提到的任何一个建议是什么,所以任何指导都将不胜感激!它不会让我给它贴上这样的标签,但是,就像我说的,这是一个家庭作业问题(尽管考虑到缺乏解释,这似乎是一个可笑的难题),所以我不一定想要答案,因为我想知道到底发生了什么


非常感谢大家

假设您知道问题所在,下面是该表示法的含义:

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]]).

这可分为三步:从左到中、从左到右、从中到右。上一个查询也是如此。

假设您知道问题所在,下面是该表示法的含义:

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]]).

这可分为三步:从左到中、从左到右、从中到右。最后一个问题也是一样。

你应该检查一下这一点。这几乎是不言自明的,我不会再批评你的教授了。@user1638891我相信在我理解它之后会的。他只是说“一个列表是这样写的[a,b],解决这个问题”,所以我不知道这到底是什么意思。你应该检查一下这是非常不言自明的,我不想批评你的教授。@user1638891我相信在我理解它之后会的。他只是说“一个列表是这样写的[a,b],解决这个问题”,所以我不知道这到底是什么意思。