Интеллектуальные информационные системы. Макаренко С.И. - 132 стр.

UptoLike

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

131
а запрос
?- [личность(Х)|Т]=[личность(джон), а, b].
значения
Х=джон Т=[а, Ь].
14.7.2 Стандартные функции обработки списков
Покажем на примерах, как можно использовать запись вида
[Н|T]
вместе с рекурсией для определения некоторых полезных целевых
утверждений для работы со списками.
Принадлежность списку. Сформулируем задачу проверки
принадлежности данного терма списку.
Граничное условие:
терм
R
содержится в списке
[H|T]
, если
R=H
.
Рекурсивное условие:
терм
R
содержится в списке
[H|T]
, если
R
содержится в списке
Т
.
Вариант записи граничного условия на Прологе имеет вид:
содержится (R, L) :-
L=[H|T],
H=R.
Вариант записи рекурсивного условия на Прологе имеет вид:
содержится(R, L) :-
L=[H|T],
содержится(R, T).
Цель
L=[H|T]
в теле обоих утверждений служит для того, чтобы
разделить список
L
на голову и хвост.
Можно улучшить программу, если учесть тот факт, что Пролог сначала
сопоставляет с целью голову утверждения, а затем пытается согласовать его
тело. Новая процедура, которую мы назовем «принадлежит», определяется
таким образом:
принадлежит (R, [R|Т]).
принадлежит (R, [H|Т]) :- принадлежит (R, T).
На запрос
?- принадлежит(а, [а, Ь, с]).
будет получен ответ
да
.
а запрос
     ?- [личность(Х)|Т]=[личность(джон), а, b].
значения
     Х=джон Т=[а, Ь].

            14.7.2 Стандартные функции обработки списков

     Покажем на примерах, как можно использовать запись вида [Н|T]
вместе с рекурсией для определения некоторых полезных целевых
утверждений для работы со списками.
     Принадлежность      списку.    Сформулируем         задачу   проверки
принадлежности данного терма списку.
     Граничное условие:
                 терм R содержится в списке [H|T], если R=H.
     Рекурсивное условие:
      терм R содержится в списке [H|T], если R содержится в списке Т.
     Вариант записи граничного условия на Прологе имеет вид:
     содержится (R, L) :-
     L=[H|T],
     H=R.
     Вариант записи рекурсивного условия на Прологе имеет вид:
     содержится(R, L) :-
     L=[H|T],
     содержится(R, T).
      Цель L=[H|T] в теле обоих утверждений служит для того, чтобы
разделить список L на голову и хвост.
      Можно улучшить программу, если учесть тот факт, что Пролог сначала
сопоставляет с целью голову утверждения, а затем пытается согласовать его
тело. Новая процедура, которую мы назовем «принадлежит», определяется
таким образом:
     принадлежит (R, [R|Т]).
     принадлежит (R, [H|Т]) :- принадлежит (R, T).
     На запрос
     ?- принадлежит(а, [а, Ь, с]).
будет получен ответ да.




                                     131