Программирование на языке Пролог для искусственного интеллекта


         

Теперь на нескольких примерах посмотрим,



                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),

                    % Подсчет в хвосте

                N is N1 + 1;

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


                                % Иначе - подсчитать только в хвосте

В следующем более сложном упражнении по программированию числовых ребусов используется предикат nonvar.


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий