我是Prolog的新手。
使用这个基本的“数据库”结构,我以为我能够查询数据库以找出
鲸鱼吃什么?
eats(Horse, grass).
eats(Monkey, banana).
eats(Whale, fish).
我不想更改该数据库设置(如果可能)。我使用以下查询以及相应的不需要的结果:
在这里,我尝试问'谁吃鱼?'
?- eats(X, fish).
true.
在这里,我尝试问'鲸鱼吃什么?'
?- eats(Whale,X).
X = grass ;
X = banana ;
X = fish.
答案 0 :(得分:9)
您的查询是正确的,这是您的事实数据库是错误的。原子需要以小写字母开头(或引用)。你用大写字母开始了马,猴子,鲸鱼,因此它们是变量(并匹配任何东西)。因此,您当前的数据库相当于:
eats(X, grass).
eats(X, banana).
eats(X, fish).
答案 1 :(得分:1)
事实中的对象必须以小写字母开头,或用引号括起来。在这种情况下,他们将是原子。在您的情况下,Prolog认为它们是变量。
http://www.cse.unsw.edu.au/~billw/cs9414/notes/prolog/intro.html#facts