我正在尝试开发一个简单的子手游戏,作为大学课程的家庭作业。这很简单,但是我遇到了麻烦,无法正常工作。
此代码:
member(El,[El|_]).
member(El,[_|Tl]) :- member(El,Tl).
inc(X,Y) :- Y is X+1.
dec(X,Y) :- Y is X-1.
start(E,A) :-
((E==5) -> loose,!);
((A==3) -> won,!);
nl,
write('write a letter: '),
read(Letter),
(member(Letter,[c,a,r])>write('Hit!'),inc(A,W),
start(E,W);write('Miss!'),inc(E,L),start(L,A)).
loose :- write(‘You Loose !!!').
won :- write(‘You Win!!!').
游戏的想法是让玩家尝试猜出“ car”一词,我将其放入列表[c,a,r]。当玩家键入列表中的字母时,A = A + 1。当玩家键入不在列表中的字母时,E = E + 1。它应该重复直到A = 3(赢得玩家)或E = 5(失去玩家= 5个错误的字母)。但是它没有按预期的方式工作。而且该程序永远无法重复循环以赢得或赢得比赛。
当我输入有效字母时,我收到以下消息:
?- start(E,A).
write a letter: a.
Hit!
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [10] _4366 is _4372+1
ERROR: [8] start(_4398,_4400) at c:/users/documents/prolog/new2.pl:7
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
当我输入无效的字母时,会收到相同的消息:
?- start(E,A).
write a letter: k.
Miss!
ERROR: Arguments are not sufficiently instantiated
ERROR: In:
ERROR: [10] _5378 is _5384+1
ERROR: [8] start(_5410,_5412) at c:/users/ocuments/prolog/new2.pl:7
ERROR: [7] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.
请,一些在Prolog中经验丰富的人可以帮助我吗?
非常感谢。