2016-12-14 7 views
-1

Новая задача:Преобразование базы знаний для Prolog

У меня есть набор объектов, ака фруктов в моей сумке:

apple(b). 
orange(c). 
pear(d). 
carrot(e). 
onion(f). 
pepper(g). 

И эти правила:

  1. ∀x, фрукты (x) V Овощи (x) [все фрукты или овощи]
  2. ∀x, Apple (x) -> Красный (x) V Зеленый (x) [Яблоки красные или зелёные]
  3. ∀x, Apple (x) V Оранжевый (x) V Груша (x)) -> Фрукты (x) [яблоки, апельсины и груши - фрукты]
  4. ∀x, морковь (x) V Перец (x) - > Овощной (х) [морковь и перец Veges]
  5. ∀x, фрукты (х) -> вкусно (х) [все фрукты вкусны]
  6. ∀x, морковь (х) -> вкусно (х) [все морковь вкусны]
  7. ∀x, лук (х) -> ¬tasty (х) [лук не вкусно]

Старый Задача завершена:

  1. ∀x, Собаки (х) V Кошки (х) [все это собака или кошка]
  2. ∀x, GShephard (х) -> черный (х) V Белый (х) [germanshephard черный или белый]
  3. ∀x, GShephard (х) У собак (х) V Ротвейлер (х)) -> собака (х) [germanshephard, собачий и ротвейлеры являются собака]
  4. ∀x, лев (х) - > волосатый (х) [все лев волосатый]
  5. ∀x, рыба (х) -> ¬hairy (х) [рыба не волосатая]

Основываясь на том, что Даниэль помог мне узнать и ВАЗ т Я пытался сам по себе это код, я придумал:

% the Facts 

apple(a). 
apple(b). 
orange(c). 
pear(d). 
carrot(e). 
onion(f). 
pepper(g) 

Я хочу, чтобы иметь возможность задать эти вопросы к моей базе знаний:

  1. Какие фрукты являются красный ?
  2. Является ли какой-нибудь лук вкусным?
  3. Какие цвета?
  4. Есть ли вкусный овощ?

До сих пор, только 2 и 3 работает, когда я использую запросы: 2 tasty(f) возвращает ложь, которую я считаю правильным и 3 я использую coloured(X) и возвращает яблоки. Любая идея, как получить ответы на вопросы, чтобы получить ответы на 1 и 4? начало

+2

«Пожалуйста, сделайте мою домашнюю работу», действительно не в порядке. –

+0

Это не домашнее задание. Я пытаюсь понять пролог и пытается кодировать КБ из моего учебного пособия. Я не видел, чтобы эти конкретные утверждения были преобразованы в пролог в любых других учебниках, поэтому я хотел знать, знает ли кто-нибудь, как обрабатывать эти утверждения. Особенно утверждение, где «все собака или кошка». Пожалуйста, не переходите к выводам, когда вы не знаете. –

+0

Если это в вашем учебном пособии, это домашнее задание, а также оно должно быть описано в учебнике где-то. –

ответ

1

Давайте с первым:

dog_or_cat(X) :- dog(X) ; cat(X). 

Это также может быть представлена ​​с несколькими пунктами:

dog_or_cat(X) :- dog(X). 
dog_or_cat(X) :- cat(X). 

Правило № 2 будет похож.

Правило № 3. Обычно такое заявление выглядит «назад» в Prolog. Это потому, что Prolog действительно пытается что-то доказать, и для этого он должен выполнить тело предложения. Итак, давайте посмотрим на нее:

dog(X) :- gshephard(X) ; canine(X) ; rottweiler(X). 

Что Пролог будет делать, когда он видит dog(X) это попытка найти решение gshephard(X). Если это не удастся, он попробует canine(X) и т. Д. Это происходит в определенном порядке, и это необходимо для вычисления и существенного различия между фактической логикой и Prolog, но в любом случае это обычно, как импликация обрабатывается в Prolog.

Правила 4 и 5 аналогичны 3, за исключением того, что вам необходимо знать, что отрицание в Prolog предоставляется оператором \+.

Edit: В ответ на ваши новые вопросы:

red_fruit(X) :- fruit(X), red(X). % question 1 
tasty_veg(X) :- vegetable(X), tasty(X). % question 4 

Похоже, у вас возникли проблемы с тем, как сказать «и» в Прологе. Это просто «,», означающее, удовлетворяющее это, а затем это. red_fruit(X) читается как «чтобы доказать, что X - это красный плод, сначала докажите, что X является плодом, а затем докажите, что X краснеет».

+0

Спасибо, я постараюсь реализовать это и посмотреть, как это происходит. Я могу еще раз прокомментировать, если у меня возникнут проблемы. Благодарю. –

+0

@ KimberlyJames звучит хорошо! Кстати, какую книгу вы проходите? –

+0

хорошо пример КБ из моего учебника по предмету в университете, а книга, которую я просматриваю, - это программирование в PROLOG: использование стандарта ISO W.F. Clocksin –

Смежные вопросы