2011-01-21 43 views
8

我写这个谓词在序言:警告在序言

list([]). 
list([X|L]) :- list(L). 

它工作得很好,但我得到了这样的警告:

**Warning: /Users/hw6.pl:2: 
      Singleton variables: [X]** % 

我能做些什么来避免呢?

回答

16

该警告告诉您在谓词列表的该子句(本例中为第二个子句)中只有一次使用该变量。

它为什么会警告你?因为拼写错误的变量名称往往比你经常更频繁。当你拼错一个变量时产生的代码也是一个有效的序言程序,所以如果它不警告你的话,调试将会很痛苦。

如果您不打算使用该变量(X),则可以改为使用匿名变量。 要使用匿名变量,您必须使用_作为术语而不是变量名称。

在您的例子那就是:

list([]). 
list([_|L]) :- list(L). 
2

Gusbro是完全正确的。当你只使用一次变量时,你会得到一个单身变量。你的程序在语法上仍然是正确的,但是prolog认为你输入代码时犯了错误。如果给出任何答案,则下划线变量将始终统一为真。