4

誰もが有名なハノイのプロローグを知っています

ここで見つけることができます

素晴らしいですが、このクエリを書くと move(3,left,right,center) になります。

これらの結果が表示されていません

Move top disk from left to right
Move top disk from left to center
Move top disk from right to center 
Move top disk from left to right 
Move top disk from center to left 
Move top disk from center to right 
Move top disk from left to right 

私が得たものは

Trace: >> RETURN: nl()
Trace: >> RETURN: hanoi(1,left,right,center)
Trace: >> RETURN: hanoi(2,center,right,left)
Trace: >> RETURN: hanoi(3,left,right,center)
True
1 Solution

それで、どうすればより良い方法で結果を印刷できるのでしょうか。また、ディスクに名前を付けて、次の「ディスクAを左から右に移動」のように結果を表示するようにプログラムに名前を付けることができますか?

いろいろ聞いてすみませんが、私はPROLOGが大好きです。

4

2 に答える 2

0

編集が査読されるには永遠に時間がかかると思うので、ここに修正を投稿します. Pesto が投稿したコードにはバグがあります。正しいバージョン (少しきれいな出力フォーマットを使用) は次のようになります。

move([Disc],X,_,Y) :-  
    format("Move disk ~w from ~w to ~w\n", [Disc, X, Y]).
move([Bottom|Rest],Start,Swap,Goal) :- 
    move(Rest,Start,Goal,Swap), 
    move([Bottom],Start,_,Goal),
    move(Rest,Swap,Start,Goal).

GNU Prolog でチェック済み。

于 2012-02-04T17:23:08.383 に答える