序言中的警告
我在序言中写了这个谓词:
list([]).
list([X|L]) :- list(L).
它运行良好,但我收到了这个警告:
**Warning: /Users/hw6.pl:2:
Singleton variables: [X]** %
我可以做什么来避免它?
I wrote this predicate in prolog :
list([]).
list([X|L]) :- list(L).
it works well, but I got this warning :
**Warning: /Users/hw6.pl:2:
Singleton variables: [X]** %
what I can do to avoid it ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
该警告告诉您,您有一个变量在谓词列表的该子句(在本例中是第二个子句)中仅使用了一次。
为什么它会警告您这一点?因为您经常会拼写错误变量名称。当你拼写错误一个变量时,生成的代码也是一个有效的 prolog 程序,因此如果它不警告你,调试将会很痛苦。
如果您不打算使用该变量 (X),则可以使用匿名变量。
要使用匿名变量,您必须使用 _ 作为术语而不是变量名称。
在你的例子中它将是:
The warning tells you that you have a variable used only once in that clause of the predicate list (in this case the second clause).
Why does it warns you of this ? Because it is more than often that you have misspelled the variable name. The resulting code when you misspell a variable is also a valid prolog program, so debugging would be painful if it does not warn you.
If you are not going to use that variable (X), you can use an anonymous variable instead.
To use an anonymous variable you have to use _ as the term instead of a variable name.
In your example it would be:
古斯布罗是完全正确的。当你只使用一个变量一次时,你将得到一个单例变量。您的程序在语法上仍然是正确的,但 prolog 假定您在输入代码时犯了错误。如果给出任何答案,下划线变量将始终统一为 true。
Gusbro is exactly right. When you use a variable only once you will get a singleton variable. Your program is still syntactically correct, but prolog assumes you made a mistake typing your code. The underscore variable will always unify as true if it is given any answer.