первый StackOverflow вопрос.Prolog Рекурсия и завершение
Я пишу предикат в прологе, который принимает три параметра. Это (соответственно) символ, список строк, а последний параметр - список всех строк во втором параметре, начинающихся с первого параметра. Мои заявления о записи являются заменой моего полного отсутствия знаний о том, как отслеживать в SWI-Prolog. Во всяком случае, на код!
startString(C, [H1|T1], [H2|T2]) :-
atom_chars(H1, [C| _ ]),
H2 = H1,
startString(C, T1, T2).
startString(C, [ _ |T1], Y) :-
startString(C, T1, Y),
write(foo).
startString(_, [], []) :-
write(foo).
Какие выходы:
foofoofoo
X = [some, simple]
Моя методология является правильным, но предикат не прекращает (отсутствие периода после запись X не является ошибкой). Мой вопрос: почему? Из ограниченных примеров рекурсии, которые я нашел в Интернете, третья версия моего предиката должна прервать предикат и сделать х определенным ответом.
Когда я нажимаю кнопку ввода, я могу ввести другой запрос, но у меня есть такая же небольшая «проблема» в другом предикате, который я написал в той же программе. Любая помощь с этим предикатом также должна переноситься на другой. Благодаря!
Я нашел решение своей проблемы , и это связано с сокращением. Это сложная тема, которую я все еще не совсем уверен, что понимаю, но добавление ее в конец версий моих предикатов позволило прологам «Остановить» то, что я хотел. Я думаю, это имеет много общего с cursion и метод, который я решил решить эту проблему.Благодарим вас за подробный ответ, это поможет мне с другими прологами, которые у меня есть! – Ryanman