3

わかりました、私はこれらの2つの述語hangmanを取得しましたgraphics

fail([]).

hangman:-
    getPhrase(Ans), 
    !, 
    write('Welcome to hangman.'),
    nl,
    fail(FailedList), 
    graphics(FailedList), %<--- The call is made here.
    name(Ans,AnsList), 
    makeBlanks(AnsList, BlankList),
    getGuess(AnsList,BlankList, FailedList).


graphics(FailedList):-
    length(FailedList, L),
    L == 0,
    write('-----------'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('|'), nl,
    write('/\'), nl.

エラーが発生するのはなぜERROR: hangman/0: Undefined procedure: graphics/1ですか?
コメントに述語を入れると、プログラムは正常に機能することに注意してgraphicsくださいhangman

4

2 に答える 2

3

(この回答は実際に尋ねられた質問に関するものではないので、質問に答えるのに素晴らしい仕事をした@SeçkinSavaşçıに答えさせてください。それはコードレビューのようなものです)

ここでは、リストが空であるかどうかを視覚的にテストし、それに応じていくつかのものを表示することで対応したいとします。リストが空の部分であるかどうかのテストでは、間違っています。

graphics(FailedList):-
    length(FailedList, L),
    L == 0,
    % some IO stuff

プロローグでは、より簡単な方法で統合を使用できます。

graphics(FailedList):-
    length(FailedList, 0),
    % some IO stuff

または、述語の本体を実行するための条件として、ヘッド内の空のリストを直接テストする場合は、次のようになります。

graphics([]):-
    % some IO stuff

IOの部分については、あなたはそれをちょっと間違っています。たとえば、SWI-Prologには、writeln/1コードを軽量化する述語があります。

graphics([]):-
    writeln('-----------'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('|'),
    writeln('/\\').

さらに良いことに、format/1述語を使用できます。

graphics([]):-
    format('-----------~n|~18~n|~n|~n|~n|~n|~n|~n|~n/\\').

主述語にもいくつか問題があるようですが、どこかで行き詰まっている場合は、それを調べて質問させてください:)

于 2012-05-30T09:13:51.317 に答える
2
 write('/\'), nl.

最後の行では、終了引用符を。でエスケープしてい\'ます。次のように変更します。

 write('/\\'), nl.

ところで:@Mogはコメントを見る前に答えを書いていました、私はそれをテストしました、そして今それはgraphics/1を見つけます。

于 2012-05-29T18:41:45.720 に答える