Составители:
Рубрика:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 107
- 108
- 109
- 110
- 111
- …
- следующая ›
- последняя »