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

UptoLike

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

133
Часто процедура присоединить используется для получения списков,
находящихся слева и справа от данного элемента:
присоединить (L [джим, р], [джек, билл, джим, тим, джим,
боб]).
L = [джек, билл]
R = [тим, джим, боб]
другие решения (да/нет)? да
L=[джек, билл, джим, тим]
R=[боб]
другие решения (да/нет)? да
других решений нет
Индексирование списка. Задача получения N-ro терма в списке
определяется следующим образом:
Граничное условие:
Первый терм в списке [Н|Т] есть Н.
Рекурсивное условие:
N-й терм в списке [Н|Т] является (N-I)-м термом в списке Т.
Данному определению соответствует программа:
/* Граничное условие:
получить ([H|Т], 1, Н). /* Рекурсивное условие:
получить([Н|Т], N, У) :-
М is N-1,
получить (Т, М ,Y).
Построение списков из фактов. Иногда бывает полезно представить в
виде списка информацию, содержащуюся в известных фактах. В
большинстве реализаций Пролога есть необходимые для этого предикаты:
bagof(X,Y,L)
определяет список термов
L
, конкретизирующих
переменную
Х
как аргумент предиката
Y
, которые делают истинным предикат
Y.
setof(X,Y,L)
все сказанное о предикате
bagof
относится и к
setof
,
за исключением того, что список
L
отсортирован и из него удалены все
повторения.
Если имеются факты:
собака(рекс).
собака(голди).
собака(фидо).
собака(реке).
     Часто процедура присоединить используется для получения списков,
находящихся слева и справа от данного элемента:
     присоединить (L [джим, р], [джек, билл, джим, тим, джим,
боб]).
     L = [джек, билл]
     R = [тим, джим, боб]
     другие решения (да/нет)? да
     L=[джек, билл, джим, тим]
     R=[боб]
     другие решения (да/нет)? да
     других решений нет
     Индексирование списка. Задача получения N-ro терма в списке
определяется следующим образом:
     Граничное условие:
                       Первый терм в списке [Н|Т] есть Н.
     Рекурсивное условие:
           N-й терм в списке [Н|Т] является (N-I)-м термом в списке Т.
     Данному определению соответствует программа:
     /* Граничное условие:
     получить ([H|Т], 1, Н). /* Рекурсивное условие:
     получить([Н|Т], N, У) :-
     М is N-1,
     получить (Т, М ,Y).
     Построение списков из фактов. Иногда бывает полезно представить в
виде списка информацию, содержащуюся в известных фактах. В
большинстве реализаций Пролога есть необходимые для этого предикаты:
     bagof(X,Y,L) — определяет список термов L, конкретизирующих
переменную Х как аргумент предиката Y, которые делают истинным предикат
Y.
     setof(X,Y,L) — все сказанное о предикате bagof относится и к setof,
за исключением того, что список L отсортирован и из него удалены все
повторения.
     Если имеются факты:
     собака(рекс).
     собака(голди).
     собака(фидо).
     собака(реке).


                                    133