Создание рекурсивного списка - PullRequest
0 голосов
/ 18 февраля 2019

Я застрял в этом вопросе со списками в SWI-прологе.В Прологе переменная может быть записана один раз, поэтому я не могу справиться с этой проблемой.

check(Parameter, [H | T], Result) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

Итак, предикат check / 3 принимает параметр, список и дает мне окончательный результат.get_res / 3 дает мне средний результат, который я использую в качестве входных данных для рекурсивного случая проверки / 3.Поэтому в Result я должен иметь Res для каждого рекурсивного вызова.Я пытался использовать append ([Parameter], [], Result) перед рекурсивным вызовом, но первый раз успешно, а затем не удается, потому что Result не может быть переписан.Я знаю, что мне также нужен базовый случай, это может быть проверка (_, [], []).Но я даже не уверен в этом

1 Ответ

0 голосов
/ 18 февраля 2019

Для рекурсивного добавления ваших результатов к выводу вы можете изменить код следующим образом:

check(_,[],[]).
check(Parameter, [H | T], [Res|Result]) :- 
   get_res(Parameter, H, Res), 
   check(Res, T, Result).

Базовый регистр также важен в этой ситуации, чтобы иметь правильно работающую функцию.Когда вы вызываете check / 3, убедитесь, что аргумент для Result является переменной st, это может работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...