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

UptoLike

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

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