?-  var( Z),  Z = 2.

        Z = 2

        ?-  Z = 2, var( Z).

        no

        ?-  integer( Z), Z = 2.

        no

        ?-  Z = 2, integer( Z), nonvar( Z).

        Z = 2

        ?-  atom( 22).

        no

        ?-  atomic( 22).

        yes

        ?-  atom( ==>).

        yes

        ?-  atom( p( 1) ).

        no

Необходимость в предикате atom продемонстрируем на следующем примере. Пусть мы хотим подсчитать, сколько раз заданный атом встречается в некоторой списке объектов. Для этого мы определим процедуру

        счетчик( А, L, N)

где А - атом, L - список и N - количество вхождений этого атома. В качестве первой попытки можно было бы определить счетчик так:

        счетчик( _, [ ], 0).

        счетчик( A, [A | L], N) :-  !,

                счетчик( A, L, N1),

                                    % N1 - число вхождений атома в хвост

                N is N1 + 1.

        счетчик( А, [ _ | L], N) :-

                счетчик( A, L, N).

Теперь на нескольких примерах посмотрим, как эта процедура работает:

        ?-  счетчик( а, [а, b, а, а], N).

        N = 3

        ?-  счетчик( a, [a, b, X, Y], Na).

        Na = 3

        . . .

        ?-  счетчик( b, [a, b, X, Y], Nb).

        Nb = 3

        . . .

        ?-  L=[a, b, Х, Y], счетчик( а, L, Na), счетчик( b, L, Nb).

        Na = 3

        Nb = 1

        X = a

        Y = a

        . . .

В последнем примере как X, так и Y после конкретизации получили значение а, и поэтому Nb оказалось равным только 1, однако мы хотели не этого. Нас интересовало количество реальных появлений конкретного атома, а вовсе не число термов, сопоставимых с этим атомом. В соответствии с этим более точным определением отношения счетчик мы должны теперь проверять, является ли голова списка атомом. Усовершенствованная программа выглядит так:

        счетчик( _, [ ], 0).

        счетчик( А, [В | L], N) :-

                atom( В), А = В,  !,                       % B равно атому А?

                счетчик( A, L, N1),

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату