我在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
是什么意思?我应该如何摆脱这种警告?
答案 0 :(得分:6)
以大写字母开头的标识符是变量。如果你想要原子,用单引号括起来:
parent('Amy', 'John').
或用小写字母开始:
parent(amy, john).
“singleton变量”是一个命名变量,在其词法范围内只出现一次。在实践中,这意味着你命名它,但是你没有做任何有用的事情,因此编译器警告。
答案 1 :(得分:3)
啊......把你所有的名字改成小写约翰,本等等。
由于它们是大写的,prolog认为它们是变量。由于你没有使用这些变量,它会警告你以后会遇到问题。
'true'只表示已加载模块..并带有警告。你在prolog中所做的一切都会返回真或假......不能逃避。
答案 2 :(得分:1)
您的关系使用大写名称,表示变量。您应该了解不同的datatypes in Prolog。鲍里斯已经给你提示了。
Singleton变量告诉您在其他任何地方都没有使用此变量。最后的真实告诉你,你的prolog规则没有矛盾(因为无论如何都没有规则)。