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




Задача о восьми ферзях - часть 4


Чтобы облегчить ее использование, необходимо добавить список-шаблон. Это можно сделать в запросе на генерацию решений. Итак:

        ?-  шаблон( S), решение( S).

line();

решение( [ ] ).

решение( [X/Y | Остальные ] ) :-
                        % Первый ферзь на поле X/Y,
                        % остальные ферзи на полях из списка Остальные
        решение( Остальные),
        принадлежит Y, [1, 2, 3, 4, 5, 6, 7, 8] ),
        небьет( X/Y | Остальные).

                        % Первый ферзь не бьет остальных

небьет( _, [ ]).                                 % Некого бить

небьет( X/Y, [X1/Y1 | Остальные] ) :-
            Y =\= Y1,                             % Разные Y-координаты
            Y1-Y =\= X1-X                    % Разные диагонали
            Y1-Y =\= X-X1,
            небьет( X/Y, Остальные).

принадлежит( X, [X | L] ).

принадлежит( X, [Y | L] ) :-
            принадлежит( X, L).

% Шаблон решения

шаблон( [1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).

line();

Рис. 4. 7.  Программа1 для задачи о восьми ферзях.

Система будет генерировать решения в таком виде:

        S = [1/4, 2/2, 3/7, 4/3, 5/6, 6/8, 7/5, 8/1];
        S = [1/5, 2/2, 3/4, 4/7, 5/3, 6/8, 7/6, 8/1];
        S = [1/3, 2/5, 3/2, 4/8, 5/6, 6/4, 7/7, 8/1].
        . . .




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