【发布时间】:2021-07-20 23:42:33
【问题描述】:
有人可以向我解释为什么这段代码不能正常工作吗?它陷入了一个说假的循环中。我不太确定如何运行它,这可能是问题所在。我希望它看起来像这样
Ready> [you,are,a,computer].
Eliza: i am not a computer
Ready> [do,you,speak,portuguese].
Eliza: no, i speak russian
Ready>
change(X,Y):- X = 'you', Y = 'i'.
change(X,Y):- X = 'i', Y = 'why do you'.
change(X,Y):- X = 'are', Y = 'am not'.
change(X,Y):- X = 'do', Y = 'no'.
change(X,Y):- X = 'portuguese', Y = 'russian'.
eliza :-
write('Hello! My name is eliza.'), nl,
eliza_loop.
eliza_loop :-
write('Eliza > '),
read(Input), respond(Input).
respond(Input) :-
member(Term, Input),
member(Term, [ quit, exit, leave ]),
write('Goodbye!').
respond([my,name,is,Name | _ ]) :-
write('Hello, '), write(Name), write('! Pleased to meet you.'), nl,
eliza_loop.
respond([my,Thing,is,called,Name | _ ]) :-
write(Name), write(' is a nice name for a '), write(Thing), write('.'), nl,
eliza_loop.
respond(Input) :-
member(Animal, Input),
member(Animal, [ cat, dog, fish, hamster, gerbil, snake, tortoise ]),
write('You just mentioned your '), write(Animal), write('. Tell me more about your '), write(Animal), nl,
eliza_loop.
respond(Input) :-
member(Term, Input),
member(Term, [ hate, dislike ]),
member(Term2, Input),
member(Term2, [ you ]),
write(':('), nl,
eliza_loop.
respond([ _ ]) :-
retract(list_of_excuses([ Next | Rest ])),
append(Rest, [ Next ], NewExcuseList),
asserta(list_of_excuses(NewExcuseList)),
write(Next), nl,
eliza_loop.
【问题讨论】: