【问题标题】:Undefined procedure in SWI-PrologSWI-Prolog 中的未定义过程
【发布时间】:2014-01-26 06:14:50
【问题描述】:

好的,我得到了这两个谓词 hangmangraphics

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 放在 cmets 中的 hangman 内,我的程序就可以正常工作。

【问题讨论】:

  • 您忘记了write/1 语句中的结尾'
  • @Mog 感谢您的帮助,但我仍然收到错误消息。关于它为什么无法识别的任何想法?
  • @Mog 你有答案的功劳,伙计!
  • 谢谢你们!非常感谢!

标签: prolog


【解决方案1】:

(这个答案实际上与所提出的问题无关,所以请将答案交给@SeçkinSavaşçı,他在回答问题方面做得很好,这更像是一次代码审查)

在这里,您显然想测试列表是否为空,并通过显示一些内容做出相应的反应。对于列表是否为空部分的测试,您做错了:

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

在 prolog 中,您可以更直接地使用统一:

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/\\').

主要谓词似乎也有一些问题,但如果你卡在某个地方,我会让你研究一下并提出问题:)

【讨论】:

  • 对实施的总体改进的全面概述。
【解决方案2】:
 write('/\'), nl.

在最后一行中,您使用\' 转义了结束引号。将其更改为:

 write('/\\'), nl.

顺便说一句:@Mog 在我查看 cmets 之前已经写了答案,我对其进行了测试,现在它找到了 graphics/1。

【讨论】:

    猜你喜欢
    • 2015-01-13
    • 2011-08-22
    • 2011-04-26
    • 1970-01-01
    • 2011-11-11
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多