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




Программа 2 - часть 2


        безопасный( [ ]).

        безопасный( [Ферзь | Остальные ] :-

              безопасный( Остальные),

              небьет(Ферзь | Остальные).

В этой программе отношение небьет

более хитрое.

line();

решение( Ферзи) :-

        перестановка( [1, 2, 3, 4, 5, 6, 7, 8], Ферзи),

        безопасный( Ферзи).

перестановка( [ ], [ ]).

перестановка( [Голова | Хвост], СписПер) :-

        перестановка( Хвост, ХвостПер),

        удалить( Голова, СписПер, ХвостПер).

                            % Вставка головы в переставленный хвост

удалить( А, [А | Список).

удалять( А, [В | Список], [В, Список1] ) :-

        удалить( А, Список, Список1).

безопасный( [ ]).

безопасный( [Ферзь | Остальные]) :-

        безопасный( Остальные),

        небьет( Ферзь, Остальные, 1).

небьет( _, [ ], _ ).

небьет( Y, [Y1 | СписY], РасстХ) :-

    Y1-Y =\= РасстХ,

    Y-Y1 =\= РасстХ,

    Расст1 is РасстХ + 1,

    небьет( Y, СписY, Расст1).

line();

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

Трудность состоит в том, что расположение ферзей определяется только их Y-координатами, а Х-координаты в представлении позиции не присутствуют в явном виде. Этой трудности можно избежать путем небольшого обобщения отношения небьет, как это показано на рис. 4.8. Предполагается, что цель

        небьет( Ферзь, Остальные)




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