Преобразование списка в термины в прологе - PullRequest
0 голосов
/ 09 октября 2019

Мне нужно реализовать предикат cons(List, Term), который будет принимать список [Head|Tail] и преобразовывать его в термины, представленные как next(Head, Tail). Как мне это сделать? Я даже не знаю, с чего начать.

Вот пример успешного запроса, приведенный в вопросе:

cons([a,b,c],X).  /*query returns X=next(a,next(b,next(c,null))).*/

1 Ответ

3 голосов
/ 09 октября 2019

Для выполнения большинства задач со списками потребуется рассмотреть два случая: пустой список и список с заголовком и подсписком. Обычно ваш базовый случай обрабатывает пустой список, а ваш индуктивный случай обрабатывает список с подсписком.

Сначала рассмотрим ваш базовый случай:

cons([], null).

Теперь разберитесь с вашим индуктивным случаем:

cons([X|Xs], next(X, Rest)) :- cons(Xs, Rest).
...