Как найти конкретные значения в базе данных, используя арифметические операторы - PullRequest
2 голосов
/ 02 апреля 2019

У меня проблемы с этой базой. Я понятия не имею, как заставить ответы, отличные от «истина» или «ложь» после ответа на вопрос: ?- car(X,_,_,Y=<20000).

Какие автомобили проехали менее 20000 км (последний номер в списке)?

Я устал:

Z=20000
car(X,_,_,Y) :-
Y=<Z
car(X,_,_,Y).

Также у меня есть 2 вопроса:

  1. Нужно ли применять use_module(library(clpfd))?

  2. Должен ли я создать какую-то функцию или что-то еще?

car(opel, red, 2011, 10000).
car(bmw, black, 2010, 0).
car(bmw, green, 1999,20000).
car(bmw, black, 2015,10000).
car(fiat, white, 1988,100000).
car(fiat, red, 2000,200000).
car(nissan, black, 2014, 10000).
car(jaguar, silver, 2014, 10000).
car(opel, black, 2000, 150000).
car(opel, white, 2000, 15000).

Я ожидаю, что swi-prolog покажет мне все автомобили, которые проехали менее 20000 км. Конечно построчно нажатием; кнопка.

1 Ответ

1 голос
/ 02 апреля 2019

Пролог не является функциональным языком.Таким образом, в вашем запросе car(X,_,_,Y=<20000), Y=<20000 - это просто составной термин с именем =< и двумя аргументами Y и 2000.Этот составной термин не оценивается как функция при использовании в качестве аргумента предиката car/4;Вы должны использовать его в качестве цели следующим образом.Попробуйте вместо:

?- car(Brand, _, _, Mileage), Mileage =< 20000.
Brand = opel,
Mileage = 10000 ;
Brand = bmw,
Mileage = 0 ;
Brand = bmw,
Mileage = 20000 ;
Brand = bmw,
Mileage = 10000 ;
Brand = nissan,
Mileage = 10000 ;
Brand = jaguar,
Mileage = 10000 ;
Brand = opel,
Mileage = 15000.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...