Я пытаюсь разработать простую игру палача в качестве домашнего задания для предмета в университете. Это очень просто, но у меня проблемы, и я не могу заставить это работать.
Это код:
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.
Пожалуйста, мог бы кто-нибудь более опытный в Прологе помочь мне?
Большое спасибо.