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

       

а) Расстояние по



Рисунок 4. 8.    (а)     Расстояние по Х между Ферзь и Остальные равно 1.
(b)    Расстояние по Х между Ферзь и Остальные равно 3


Отношение перестановка мы уже определила в гл. 3, а вот отношение безопасный нужно еще определить. Это определение можно разбить на два случая:

(1)        S - пустой список. Тогда он, конечно, безопасный, ведь нападать не на кого.

(2)        S - непустой список вида [Ферзь | Остальные]. Он безопасный, если список Остальные - безопасный и Ферзь не бьет ни одного ферзя из списка Остальные.

На Прологе это выглядит так:

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

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


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

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

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();



Содержание раздела