7

Prolog を使用して小さなテキスト ベースのアドベンチャー ゲームを作成したいと考えています (これはばかげた考えかもしれませんが、それについて議論するつもりはありません)。

唯一の問題は、「true」と「false」の値も表示されないと、画面にテキストを印刷できないことです。

たとえば、次のようなことを試してみると:

take(desk) :- write('This thing is way too heavy for me to carry!').

wheretakeは、1 か所の述語とdesk、出力として取得する名前です。

?- take(desk).
   This thing is way too heavy for me to carry!
   true.

この「真」または「偽」の出力を取り除くにはどうすればよいですか?

format/1単純なテキスト出力用の1か所の述語と、format/22か所の述語(変数の名前を出力したい場合)も試してみましたが、まったく同じ問題が発生します。

私もこの回答を見ましたが、最初は十分に詳細ではありません(少なくとも私のような人にとってはそうではありません).2番目に、もっと簡単な方法があることを願っています.

最後に、SWI-Prolog を使用しています。

ありがとうございました。

4

1 に答える 1

10

簡単な方法は、独自の小さな REPL (読み取り、評価、出力ループ) を作成することです。このようなもの:

game :-
    repeat,
    write('> '),
    read(X),
    call(X),
    fail.

これは、プロンプトで入力したものをプロンプトして実行するだけです。takeあなたの事実(および私が説明のために追加した別の事実)と併せて:

take(desk) :- write('This thing is way too heavy for me to carry!'), nl.
take(chair) :- write('This is easier to carry.'), nl.

あなたは得るでしょう:

?- game.
> take(desk).
This thing is way too heavy for me to carry!
> take(chair).
This is easier to carry.
>

何らかの方法でループを終了するまでゴールが解決されないため、 trueorを取得できません。またはまたはその他のチェックを追加して、ループを終了できます。Ctrl-C または Ctrl-D を使用してループを中止することもできます。ニーズや好みに合わせて機能させるために、他の「機能」を追加する必要がある場合があります。falsegamequitbyegame

于 2014-06-24T02:29:17.843 に答える