Я недавно изучал Пролог, и у меня проблемы с его работой, как я этого хочу. В качестве примера у меня была задана задача создать психиатора Пролога, который вносит свой вклад и превращает его в вопрос: «Я думаю, что я нездоров» становится «Почему вы думаете, что вам нездоровится?».Пролог написать бесконечный цикл
Однако мой код до сих пор генерирует бесконечный цикл, когда он выходит. Он вызывает повтор на printSentence с другой несвязанной переменной, привязав ее к концу списка Output и делая это навсегда.
Вот мой код:
/* printSentence simply calls the in-built Prolog write function. */
printSentence([]) :- write('?').
printSentence([H|T]) :- write(H),write(' '), printSentence(T).
answer([], _) :- write('Why are you silent? Talk to me.').
answer(Input, Output) :- thinkMatch(Input, Output), printSentence(Output).
thinkMatch(['I', 'think'|Rest], ['Why', 'do', 'you', 'think'|SwitchedRest]) :- switchPronouns(Rest, SwitchedRest).
switchPronouns([], _).
switchPronouns([H|T], [R|SwitchedRest]) :- switchWord(H, R),switchPronouns(T, SwitchedRest).
switchWord('I', 'you').
switchWord('myself', 'yourself').
switchWord('am', 'are').
switchWord('you', 'me').
switchWord('yourself', 'myself').
switchWord(H, H).
вход,
answer(['I', 'think', 'therefore', 'I', 'am'],Output).
производит эти результаты происходит навсегда,
?- Input = ['I', 'think', 'therefore', 'I', 'am'],answer(Input, Output).
Why do you think therefore you are ?
Input = ['I', think, therefore, 'I', am],
Output = ['Why', do, you, think, therefore, you, are] ;
_G4395 ?
Input = ['I', think, therefore, 'I', am],
Output = ['Why', do, you, think, therefore, you, are, _G4395] ;
_G4398 ?
Input = ['I', think, therefore, 'I', am],
Output = ['Why', do, you, think, therefore, you, are, _G4395, _G4398] ;
_G4401 ?
Input = ['I', think, therefore, 'I', am],
Output = ['Why', do, you, think, therefore, you, are, _G4395, _G4398|...]
Извинения, если это что-то маленькое и немым Я но чтобы полностью понять внутренние махинации Пролога.
Заранее спасибо.
Это очень тщательно ответить спасибо большое! Это помогло с моим пониманием того, как работает Prolog – SHolmes