Рекурсивно вставить элемент в список - PullRequest
0 голосов
/ 16 мая 2011

Я хочу написать программу Prolog для вставки списка в другой список.Например:

% insert [1, 2] to [[1, 3, 4], [2, 5]]
[[1, 3, 4], [2, 5], [1, 2]]

Я написал следующее:

insertList([X], [], [[X]]).
insertList([H|T], [H2|T2], [[H|T], H2|T2]).

Но этот подход добавляет только один список, потому что нет рекурсии.Как я могу сделать рекурсию в этом случае?У меня была такая же проблема при вставке элементов в список в этом коде:

insert(X, [], [X]).
insert(X, [H|T], [X,H|T]).

Итак, как мне сделать рекурсию для вставки списка?Вставка может быть либо в начале, либо в конце списка.

Ответы [ 2 ]

1 голос
/ 16 мая 2011

Очевидно, что вы хотите, чтобы вставить элемент в конце списка.Тот факт, что вставляемый элемент является списком, не имеет здесь критического значения.

insertAtEnd(X,[ ],[X]).
insertAtEnd(X,[H|T],[H|Z]) :- insertAtEnd(X,T,Z).

Если вы хотите вместо этого вставить в начале, рекурсия не требуется!Фактически вам даже не нужен предикат, чтобы сделать это, поскольку термин Пролог [X|L] «вставляет» элемент X в начало списка L.

Возможно, вы имеете в виду более сложную проблему, а именновставка элемента в отсортированный список надлежащим образом, чтобы поддерживать отсортированный порядок.Однако в Вопросе не так много, чтобы предположить, что это ваша проблема.

0 голосов
/ 16 мая 2011

Вероятно, лучше всего взглянуть на следующий пост , где первый ответ содержит ссылку на сайт с объяснением рекурсии в прологе. Это хорошая отправная точка для ознакомления с упомянутыми проблемами.

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