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

UptoLike

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

103
Программа "Голова-хвост" (листинг 5.2) демонстрирует использова-
ния метода разделения списка. Два списка описаны в ней: список целых чи-
сел (имя домена - number_list) и список символических имен (домен
animal_list). Правило print_list применяется для доступа к элементам обоих
списков.
_____________________________________________________________
Листинг 5.2
/* Программа: Голова-хвост Файл: PROG0502.PRO */
/* Назначение: Работа со списками путем */
/* деления на
голову и хвост. */
domains
number_list = integer *
animal_list = symbol *
predicates
print_list(number_list) print_list(animal_list)
clauses
print_list([]).
print_list([Head|Tail]) :-
write(Head),nl,
print_list(Tail).
/***** конец программы *****/
_____________________________________________________________
Программа "Голова-хвост" использует правило
print_list([]).
print_list([Head|Tail]) :-
write(Head),nl,
print_list(Tail).
для доступа к элементам списков. Так как предикат print_list определен для
объектов обоих доменов, то это правило используется для работы как со
списком number_list, так и списком animal_list.
Когда правило пытается
удовлетворить цель
print_list([4,9,5,3])
то первый вариант правила, print_list[], дает неуспех, так как его объект яв-
ляется пустым списком. Напротив, введенный список соответствует объек-
ту второго варианта предиката, print_list([Head|Tail]). Переменной Head,
следовательно, присваивается значение первого элемента в списке, 4, в то
время как переменной Tail cтавится в соответствие оставшаяся часть списка,
[9,5,3].
Теперь, когда выделен первый элемент списка, с ним можно обра-
щаться так же, как и с любым простым объектом:
write(Head),nl,
      Программа "Голова-хвост" (листинг 5.2) демонстрирует использова-
ния метода разделения списка. Два списка описаны в ней: список целых чи-
сел (имя домена - number_list) и список символических имен (домен
animal_list). Правило print_list применяется для доступа к элементам обоих
списков.
_____________________________________________________________
                 Листинг 5.2
/* Программа: Голова-хвост Файл: PROG0502.PRO */
/* Назначение: Работа со списками путем            */
/*        деления на голову и хвост.       */
      domains
                 number_list = integer *

                  animal_list = symbol *

      predicates
print_list(number_list) print_list(animal_list)

      clauses
               print_list([]).
               print_list([Head|Tail]) :-
                            write(Head),nl,
                            print_list(Tail).
     /*****       конец программы             *****/
_____________________________________________________________

       Программа "Голова-хвост" использует правило
                  print_list([]).
                  print_list([Head|Tail]) :-
                         write(Head),nl,
                         print_list(Tail).
для доступа к элементам списков. Так как предикат print_list определен для
объектов обоих доменов, то это правило используется для работы как со
списком number_list, так и списком animal_list.
       Когда правило пытается удовлетворить цель
            print_list([4,9,5,3])
то первый вариант правила, print_list[], дает неуспех, так как его объект яв-
ляется пустым списком. Напротив, введенный список соответствует объек-
ту второго варианта предиката, print_list([Head|Tail]). Переменной Head,
следовательно, присваивается значение первого элемента в списке, 4, в то
время как переменной Tail cтавится в соответствие оставшаяся часть списка,
[9,5,3].
       Теперь, когда выделен первый элемент списка, с ним можно обра-
щаться так же, как и с любым простым объектом:
            write(Head),nl,


                                                                          103