Программирование на Турбо-Прологе - стр. 7
Здесь L1 и L2 - два списка, L3 - список, получаемый при их сцеплении. Определение отношения conc содержит два случая:
- если первый аргумент - пуст, то второй и третий аргументы представляют собой один и тот же список:
conc([],L,L).
- если первый аргумент отношения conc не пуст, то он имеет голову и хвост - [X|L1]. Результат сцепления - список [X|L3], где L3 - получен после сцепления списков L1 и L2:
conc([X|L1],L2,[X|L3]) :- conc(L1,L2,L3).
Примеры сцепления заданных списков.
Goal: conc([a,b,c],[x,y,z],L).
L = [a,b,c,x,y,z]
Goal: conc([a,[b,c],d],[a,[],b],L).
L = [a,[b,c],d,a,[],b]
Программу для conc можно применить "в обратном направлении" - для разбиения списка на две части. Например:
Goal: conc(L1,L2,[a,b,c]).
L1=[]
L2=[a,b,c]
L1=[a]
L2=[b,c]
L1=[a,b]
L2=[c]
L1=[a,b,c]
L2=[]
Используя conc можно определить отношение принадлежности следующим эквивалентным способом:
member(X,L) :- conc(_,[X|_],L).
Здесь символом "_" обозначены анонимные переменные (переменные, встречающиеся в предложении только по одному разу).
2.2.3.Добавление элемента (append)
Наиболее простой способ добавления элемента в список - вставить его в начало так, чтобы он стал его новой головой. Процедура добавления определяется в форме факта
append(X,L,[X|L]).
2.2.4. Удаление элемента (remove)
Имеем два случая:
- если X - голова списка, то результат удаления - хвост списка;
- если X - в хвосте списка, то его нужно удалить оттуда.
В результате отношение remove определяется так:
remove(X,[X|Tail],Tail).
remove(X,[Y|Tail],[Y|Tail1]) :- remove(X,Tail,Tail1).
Если в списке встречается несколько вхождений элемента X, то remove сможет исключить их все при помощи возвратов.
Содержание Назад Вперед