Проблемы со сравнением в правилах пролога - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в Прологе и создаю небольшую базу с "машинными" утверждениями.

car(ford, mondeo, 125600, 31000).
car(ford, mondeo, 111232, 35000).
car(renault, megane, 82000, 28000).
car(renault, laguna, 102000, 35000).
car(renault, laguna, 82000, 42000).
car(www, pasat, 82000, 42000).
car(renault, aaa, 82000, 428900).

Как мне найти все автомобили с> 10000 третьим аргументом?Я пытаюсь написать правило в consol (! Не в файле!) ?- car(Z,X,C > 10000,V)., но я получаю только false (но как? Пролог должен печатать все машины, потому что все машины совпадают).

1 Ответ

0 голосов
/ 25 мая 2018

car(Z,X,C > 10000,V). не будет работать, потому что пролог попытается объединить каждый заголовок правила с car(Z,X,C > 10000,V)., и он потерпит неудачу для каждого из них.

Подробнее:

car(ford, mondeo, 125600, 31000) не удастся объединить с car(Z,X,C > 10000,V), потому что 125600 не удастся объединить с C > 10000.

Обязательно прочитайте и поймите , как работает объединение .

Правильная стратегия заключается в использовании обратного отслеживания для фильтрации результатов: вы, вероятно, заметили, что ввод запроса car(Z,X,C,V) вернет вам все данные автомобилей.

Если вы добавите к этому еще одну цель, он будетнужно вернуться назад, когда вторая цель провалилась, и попробовать другой выбор.

Продолжить чтение также с поиском доказательства .

Вторая цель, которую вы должны добавить к вашему запросу.тогда C>10000:

car(Z,X,C,V), C > 10000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...