Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Удаление элемента из списка




Определим отношение del(X, L, L1), где

X – удаляемый элемент;

L – исходный список;

L1 – список, полученный в результате удаления X из L.

Возможны два случая:

1) если X – голова списка, то результирующий список равен хвосту списка L. Первая часть правила (нерекурсивная):

del(X, [X|L], L).

2) если X принадлежит хвосту, то список L делим на голову и хвост. Для хвоста снова вызывается правило del. Вторая часть правила (рекурсивная):

del(X, [Y|L], [Y|L1]):- del(X,L,L1).

Полная запись правила удаления элемента из списка:

del(X, [X|L], L).

del(X, [Y|L], [Y|L1]):- del (X,L,L1).

Например, для удаления из списка [1, 2, 3, 4] элемента 3, следует составить запрос:

GOAL

del(3, [1, 2, 3, 4], L),Write (L), nl.

Результат: [1, 2, 4].

нет
При выполнении программы X сравнивается с первым элементом списка.

нет
X = 3 [1 | 2, 3, 4] - первая часть правила не выполняется, 1 заносится в стек, рекурсивный вызов для хвоста [2, 3, 4]

да
X = 3 [2 | 3, 4] - первая часть правила не выполняется, 2 заносится в стек, рекурсивный вызов для хвоста [3, 4]

X = 3 [3 | 4] первая часть правила выполняется, результирующий список принимает значение хвоста L = [4]. Элементы извлекаются из стека по одному и становятся в голову списка L.

L = [1, 2, 4]





Поделиться с друзьями:


Дата добавления: 2015-09-20; Мы поможем в написании ваших работ!; просмотров: 469 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Студент всегда отчаянный романтик! Хоть может сдать на двойку романтизм. © Эдуард А. Асадов
==> читать все изречения...

2394 - | 2151 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.