0

我正在尝试开发一个简单的刽子手游戏作为大学科目的家庭作业。这很简单,但我遇到了麻烦,我无法让它工作。

这是代码:

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!!!').

游戏的想法是让玩家尝试猜测“汽车”这个词,我把它放在一个列表 [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方面更有经验的人可以帮助我吗?

非常感谢。

4

0 回答 0