gpt4 book ai didi

prolog - SWI-Prolog 中未定义的过程

转载 作者:行者123 更新时间:2023-12-02 14:36:39 25 4
gpt4 key购买 nike

好的,我得到了这两个谓词 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.

为什么我会收到错误:错误:hangman/0:未定义的过程:graphics/1
请注意,如果我将谓词 graphics 放在注释中的 hangman 内,我的程序可以正常工作。

最佳答案

(这个答案并不是真正关于所提出的问题,所以请将答案交给@SeçkinSavaşçı,他很好地回答了这个问题,这更多的是代码审查)

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

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

主要谓词似乎也有一些问题,但如果您遇到困难,我会让您研究它并提出问题:)

关于prolog - SWI-Prolog 中未定义的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10799340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com