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

これは明らかに、初期状態で左側の塔に 1 つの要素があることを意味します。l、c、r は塔の名前です。最後の引数は解決策です。解決策は動きのリストです。各動きはペア [要素をどこから取得し、どこに配置するか] です。したがって、前のアトムで成文化された解決策は次のとおりです。左側のタワーの要素を右側のタワーに移動します。

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

ソリューションが間違っているため、これは失敗します。初期状態は左の塔にしかエレメントが無いので、中央の塔が無いと移動できません。

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

これは、左から中央、左から右、中央から右の 3 つの移動で解決されます。最後のクエリも同じです。

于 2012-10-18T10:10:17.917 に答える