在Prolog中如何做到这一点?

时间:2011-03-08 19:35:58

标签: prolog

我是Prolog的新手。

使用这个基本的“数据库”结构,我以为我能够查询数据库以找出

  • 谁吃鱼?
  • 鲸鱼吃什么?

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

我不想更改该数据库设置(如果可能)。我使用以下查询以及相应的不需要的结果:

在这里,我尝试问'谁吃鱼?'

?- eats(X, fish).
true.

在这里,我尝试问'鲸鱼吃什么?'

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

2 个答案:

答案 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