Prolog编程 - 简单的否定查询

Ned*_*Ned 3 prolog

我的数据库是:

eat(magi,limo).
eat(nona,banana).
Run Code Online (Sandbox Code Playgroud)

我怎么问:"谁不吃豪华轿车?" 这个:

eat(X,not(limo)).
Run Code Online (Sandbox Code Playgroud)

不行.:(

sep*_*p2k 8

首先limo是一个符号,你不能否定符号.你想要做的是否定谓词,即not(eat(X, limo)).

然而,这仍然不会给你nona带来结果.为什么不?那么有无限多的值X,这eat(X, limo)将是假的.系统需要更多信息而不是"X不吃豪华轿车"才能知道你想要哪一个.相反,我们需要要求X"X吃东西,但X不吃豪华轿车".这导致我们进行以下查询:

eat(X,Y), not(eat(X, limo)).
Run Code Online (Sandbox Code Playgroud)

这给了我们nona解决方案X.