Как это сделать в Прологе? - PullRequest
3 голосов
/ 08 марта 2011

Я новичок в Прологе.

Используя эту базовую структуру «базы данных», я подумал, что смогу запросить базу данных, чтобы выяснить

  • кто ест рыбу?
  • что едят киты?

    eats(Horse, grass).  
    eats(Monkey, banana).  
    eats(Whale, fish). 
    

Я бы не хотел изменять настройки этой базы данных (если это возможно). Я использовал следующие запросы с соответствующими нежелательными результатами:

Здесь я пытался спросить: "кто ест рыбу?"

?- eats(X, fish).
true.

Здесь я пытался спросить: "Что едят киты?"

?- eats(Whale,X).
X = grass ;
X = banana ;
X = fish.

Ответы [ 2 ]

9 голосов
/ 08 марта 2011

Ваши запросы верны, это ваша база данных фактов, которая неверна. Атомы должны начинаться со строчной буквы (или быть в кавычках). Вы запустили Horse, Monkey, Whale с заглавными буквами, поэтому они являются переменными (и соответствуют чему угодно). Следовательно, ваша текущая база данных эквивалентна:

eats(X, grass).
eats(X, banana).
eats(X, fish).
1 голос
/ 08 марта 2011

Объекты в фактах должны начинаться со строчной буквы или заключаться в кавычки. В этом случае они будут атомами. В вашем случае Пролог считает их переменными.

http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/intro.html#facts

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...