Программирование на Турбо-Прологе


Программирование на Турбо-Прологе - стр. 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 сможет исключить их все при помощи возвратов.



- Начало -  - Назад -  - Вперед -



Книжный магазин