TURBO PROLOG. Терёхин В.В. - 109 стр.

UptoLike

Составители: 

109
* Упражнение
5.12. Для программы "Деление списка"
а) задайте внешнюю цель
split(12,[96,32,8,16,55,12],L1,L2).
Как будут выглядеть списки L1 и L2 ?
б) нарисуйте диаграмму изменения значений списков в процессе работы про-
граммы.
5.5.3 Присоединение списка
Слияние двух списков и получение таким образом третьего принадле-
жит к числу наиболее полезных при работе со списками операций. Этот про-
цесс обычно называют присоединением одного списка к другому. Метод,
представленный в данном разделе, особенно часто используется в таких
приложениях, каковыми являются системы управления базами данных и
разработка интерфейсов пользователя.
В сущности, Вы, вероятно, найдете
его необходимым для большинства программ Турбо-Пролога, требующих
преобразования списков.
В качестве примера рассмотрим две переменные, L1 и L2, представ-
ляющие списки. Переменные имеют значения [1,2,3] и [4,5]. Назовем их
входными списками. Предикат, присоединяющий L2 к L1 и создающий вы-
ходной список L3, в который он должен переслать все
элементы L1 и L2.
Весь процесс можно представить себе в виде такой совокупности действий:
1. Список L3 вначале пуст.
2. Элементы списка L1 пересылаются в L3, теперь значением
L3 будет [1,2,3].
3. Элементы списка L2 пересылаются в L3, в результате чего
тот принимает значение [1,2,3,4,5].
Структура правила для выполнения этих действий достаточна проста:
append([],L,L).
append([N|L1],L2,[N|L3]) :-
append(L1,L2,L3).
Поясним теперь, как будет функционировать это правило, если на вход
подать списки L1=[1,2,3] и L2=[4,5].
Сначала Турбо-Пролог пытается удовлетворить первый вариант пра-
вила:
append([],L,L).
Для того чтобы удовлетворить это правило, первый объект предиката
append нужно сделать пустым списком. Вначале же предикат append имеет
форму
append([1,2,3],[4,5],_).
Отметим, что третий, выходной
список в этой форме пока еще не опреде-
лен. Внутренний процесс унификации Турбо-Пролога, пытаясь удовлетво-
рить второе правило append, раскручивает цепочку рекурсий до тех пор, по-
ка не обнуляет первый список. Элементы списка при этом последовательно
* Упражнение
      5.12. Для программы "Деление списка"
а) задайте внешнюю цель
            split(12,[96,32,8,16,55,12],L1,L2).
Как будут выглядеть списки L1 и L2 ?
б) нарисуйте диаграмму изменения значений списков в процессе работы про-
граммы.
     5.5.3 Присоединение списка
      Слияние двух списков и получение таким образом третьего принадле-
жит к числу наиболее полезных при работе со списками операций. Этот про-
цесс обычно называют присоединением одного списка к другому. Метод,
представленный в данном разделе, особенно часто используется в таких
приложениях, каковыми являются системы управления базами данных и
разработка интерфейсов пользователя. В сущности, Вы, вероятно, найдете
его необходимым для большинства программ Турбо-Пролога, требующих
преобразования списков.
      В качестве примера рассмотрим две переменные, L1 и L2, представ-
ляющие списки. Переменные имеют значения [1,2,3] и [4,5]. Назовем их
входными списками. Предикат, присоединяющий L2 к L1 и создающий вы-
ходной список L3, в который он должен переслать все элементы L1 и L2.
Весь процесс можно представить себе в виде такой совокупности действий:
      1. Список L3 вначале пуст.
      2. Элементы списка L1 пересылаются в L3, теперь значением
L3 будет [1,2,3].
      3. Элементы списка L2 пересылаются в L3, в результате чего
тот принимает значение [1,2,3,4,5].
      Структура правила для выполнения этих действий достаточна проста:
            append([],L,L).
            append([N|L1],L2,[N|L3]) :-
                                     append(L1,L2,L3).
      Поясним теперь, как будет функционировать это правило, если на вход
подать списки L1=[1,2,3] и L2=[4,5].
      Сначала Турбо-Пролог пытается удовлетворить первый вариант пра-
вила:
            append([],L,L).
      Для того чтобы удовлетворить это правило, первый объект предиката
append нужно сделать пустым списком. Вначале же предикат append имеет
форму
            append([1,2,3],[4,5],_).
Отметим, что третий, выходной список в этой форме пока еще не опреде-
лен. Внутренний процесс унификации Турбо-Пролога, пытаясь удовлетво-
рить второе правило append, раскручивает цепочку рекурсий до тех пор, по-
ка не обнуляет первый список. Элементы списка при этом последовательно



                                                                      109