Составители:
Рубрика:
110
пересылаются в стек. Стек, логическая структура данных в памяти компью-
тера, обеспечивает временное хранение этих элементов.
Когда первый объект предиката append окажется пустым списком,
становится возможным применение первого варианта правила. Третий
список при этом инициализируется вторым. Такой процесс можно пояс-
нить при помощи двух состояний append, до и после применения первого
варианта правила:
append([],[4,5],_).
append([],[4,5],[4,5]).
В данный момент процедуры унификации Турбо-Пролога полностью
удовлетворили это правило, и Турбо-Пролог начинает сворачивать рекур-
сивные вызовы второго правила:
append([N|L1], L2, [N|L3]) :-
append(L1,L2,L3).
Извлекаемые при этом из стека элементы помещаются один за другим
в качестве головы к первому и третьему спискам. Следует особо отметить,
что элементы
извлекаются в обратном порядке (это стек !), и что значение
извлеченного из стека элемента присваивается переменной N одновремен-
но в [N|L1] и [N|L3].
Шаги данного процесса можно представить так:
append([],[4,5],[4,5])
append([3],[4,5],[3,4,5])
append([2,3],[4,5],[2,3,4,5])
append([1,2,3],[4,5],[1,2,3,4,5])
Присвоение элементов стека происходит рекурсивно до тех пор, пока
стек не будет исчерпан. В результате список L3 будет содержать элементы
обоих входных списков - [1,2,3,4,5].
Программа "Присоединение списка" (листинг 5.5) демонстрирует при-
менение данного метода. В этой программе n_list является доменом спи-
сков целых чисел. Описание предиката для присоединения одного списка к
другому записано в виде
append(n_list,n_list,n_list)
Раздел clauses содержит уже приведенные описания правил append.
Внешней целью для программы может служить, скажем, ранее
разобранный
пример:
append([1,2,3],[4,5],L).
_____________________________________________________________
Листинг 5.5
/* Программа: Присоединение списка */
/* Назначение: Слияние двух списков. */
domains
n_list = integer *
predicates
пересылаются в стек. Стек, логическая структура данных в памяти компью- тера, обеспечивает временное хранение этих элементов. Когда первый объект предиката append окажется пустым списком, становится возможным применение первого варианта правила. Третий список при этом инициализируется вторым. Такой процесс можно пояс- нить при помощи двух состояний append, до и после применения первого варианта правила: append([],[4,5],_). append([],[4,5],[4,5]). В данный момент процедуры унификации Турбо-Пролога полностью удовлетворили это правило, и Турбо-Пролог начинает сворачивать рекур- сивные вызовы второго правила: append([N|L1], L2, [N|L3]) :- append(L1,L2,L3). Извлекаемые при этом из стека элементы помещаются один за другим в качестве головы к первому и третьему спискам. Следует особо отметить, что элементы извлекаются в обратном порядке (это стек !), и что значение извлеченного из стека элемента присваивается переменной N одновремен- но в [N|L1] и [N|L3]. Шаги данного процесса можно представить так: append([],[4,5],[4,5]) append([3],[4,5],[3,4,5]) append([2,3],[4,5],[2,3,4,5]) append([1,2,3],[4,5],[1,2,3,4,5]) Присвоение элементов стека происходит рекурсивно до тех пор, пока стек не будет исчерпан. В результате список L3 будет содержать элементы обоих входных списков - [1,2,3,4,5]. Программа "Присоединение списка" (листинг 5.5) демонстрирует при- менение данного метода. В этой программе n_list является доменом спи- сков целых чисел. Описание предиката для присоединения одного списка к другому записано в виде append(n_list,n_list,n_list) Раздел clauses содержит уже приведенные описания правил append. Внешней целью для программы может служить, скажем, ранее разобранный пример: append([1,2,3],[4,5],L). _____________________________________________________________ Листинг 5.5 /* Программа: Присоединение списка */ /* Назначение: Слияние двух списков. */ domains n_list = integer * predicates 110
Страницы
- « первая
- ‹ предыдущая
- …
- 108
- 109
- 110
- 111
- 112
- …
- следующая ›
- последняя »