Predicates. buy_car(symbol,symbol) %предикат описывающий машины по марке и цвету

buy_car(symbol,symbol) %предикат описывающий машины по марке и цвету

car(symbol,symbol,integer) % предикат описывающий машины в наличии по марке, цвету и цене

colors(symbol,symbol) % предикат описывающий приятный цвет

Clauses

buy_car(Model,Color):-

car (Model, Color, Price),

colors(Color,sexy),

!,

Price < 25000.

car(maserati,green,25000).

car(corvette,black,24000).

car(corvette,red,26000).

car(porsche,red,24000).

colors(red,sexy).

colors(black,mean).

colors(green,preppy).

Goal

buy_car(corvette, Y).

В данном примере поставлена цель: найти corvette (Корвет) приятного цвета, подходящий по стоимости. Отсечение в правиле buy_car означает, что поскольку в базе данных содержится только один "Корвет" приятного цвета, хоть и со слишком высокой ценой, то нет нужды искать другую машину.

Получив целевое утверждение buy_car(corvette, Y) программа отработает следующие шаги:

1. Visual Prolog обращается к car, первой подцели для предиката buy_car.

2. Выполняет проверку для первой машины, Maserati, которая завершается не удачно.

3. Затем проверяет следующее предложение саг и находит соответствие, связывая переменную Color со значением black.

4. Переходит к следующему обращению и проверяет, имеет ли выбранная машина приятный цвет. Черный цвет не является приятным в данной программе, таким образом проверка завершается неудачно.

5. Выполняет поиск с возвратом к обращению саг и снова ищет Corvette, удовлетворяющий этому критерию.

6. Находит соответствие и снова проверяет цвет. На этот раз цвет оказывается приятным, и Visual Prolog переходит к следующей подцели в правиле: к отсечению. Отсечение немедленно выполняется, "замораживая" все переменные, ранее связанные в этом предложении.

7. Переходит к следующей (и последней) подцели в правиле, к сравнению

Price < 25000.

8. Проверка завершается неудачно, и Visual Prolog пытается совершить поиск с возвратом с целью найти другую машину для проверки. Отсечение предотвращает попытку решить последнюю подцель, и наше целевое утверждение завершается неудачно.

Использование предиката Not

Показать не сексуальные и недорогие машины:

buy_car(_,Color):-

car (_, _, Price),

not(colors(Color,sexy)),

Price < 25000.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: