2012-05-29 53 views
3

好吧,我得到了这两个前提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中的谓词置于注释中,我的程序可以正常工作。

+2

你忘记了''''''''''''语句中的''''。 – m09

+0

@Mog感谢您的帮助,但我仍然得到错误。任何想法为什么它不承认它? – Kostas

+0

@Mog你有答案的信贷,队友! –

回答

2
write('/\'), nl. 

在最后一行中,你与\'逃离结束引号。将其更改为:

write('/\\'), nl. 

BTW:@Mog写答案之前,我有看评论,我测试了它,现在它找到的图形/ 1。

+0

谢谢!非常感激! – Kostas

3

(这个答案是不是真正的要求,所以请让答案@SeçkinSavaşçı谁做了伟大的工作,回答这个问题的问题,它更是一个代码审查)

在这里,你明显希望测试列表是空的,并通过显示一些事情做出相应的反应。对于测试,如果列表是空的部分,你做错了它:

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

,或者更好,在这里你:

graphics(FailedList):- 
    length(FailedList, L), 
    L == 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/\\'). 

主谓似乎有一些问题太多了,但我会让你看看它,并提出问题,如果你被困在某个地方:)

+0

对实现的一般改进的很好的概述。 –