警告:单例变量:序言中的[Alice,Ben]

时间:2014-01-09 14:03:19

标签: prolog

我在prolog中写了一个程序。

parent(Amy,John).
parent(Bob,John).
parent(John,Ben).
parent(Alice,Ben).

我在Ubuntu 12.04上使用SWI-Prolog。当我在swi-prolog解释器中插入我的文件时:

['example.pl']

我收到警告:

Warning: /home/mazix/example1.pl:1:
        Singleton variables: [Amy,John]
Warning: /home/mazix/example1.pl:2:
        Singleton variables: [Bob,John]
Warning: /home/mazix/example1.pl:3:
        Singleton variables: [John,Ben]
Warning: /home/mazix/example1.pl:4:
        Singleton variables: [Alice,Ben]
% example1.pl compiled 0.00 sec, 4 clauses
true.

这些是什么意思?底部的true是什么意思?我应该如何摆脱这种警告?

3 个答案:

答案 0 :(得分:6)

以大写字母开头的标识符是变量。如果你想要原子,用单引号括起来:

parent('Amy', 'John').

或用小写字母开始:

parent(amy, john).

“singleton变量”是一个命名变量,在其词法范围内只出现一次。在实践中,这意味着你命名它,但是你没有做任何有用的事情,因此编译器警告。

答案 1 :(得分:3)

啊......把你所有的名字改成小写约翰,本等等。

由于它们是大写的,prolog认为它们是变量。由于你没有使用这些变量,它会警告你以后会遇到问题。

'true'只表示已加载模块..并带有警告。你在prolog中所做的一切都会返回真或假......不能逃避。

答案 2 :(得分:1)

您的关系使用大写名称,表示变量。您应该了解不同的datatypes in Prolog。鲍里斯已经给你提示了。

Singleton变量告诉您​​在其他任何地方都没有使用此变量。最后的真实告诉你,你的prolog规则没有矛盾(因为无论如何都没有规则)。