Prolog 如果事实的单个参数与规则匹配,则返回true
我得到以下错误:Prolog 如果事实的单个参数与规则匹配,则返回true,prolog,Prolog,我得到以下错误: Singleton Variables: [Month] 在SWI Prolog中运行我的文件 我有以下形式的事实: weather(Month, Day, Word1, Word2, Word3). 我有以下规则: % Summer: True if Month is jun, jul, or aug summer(Month) :- weather(jun, _, _, _, _); weather(jul, _, _, _, _); weath
Singleton Variables: [Month]
在SWI Prolog中运行我的文件
我有以下形式的事实:
weather(Month, Day, Word1, Word2, Word3).
我有以下规则:
% Summer: True if Month is jun, jul, or aug
summer(Month) :-
weather(jun, _, _, _, _);
weather(jul, _, _, _, _);
weather(aug, _, _, _, _).
我是prolog新手,不明白为什么会出错。
提前谢谢 在Prolog中,以大写字母开头的标识符被用作变量,因此在您的示例中,Month是一个变量,在summer/1谓词中从未被实例化(只是在谓词中从未使用过),这就是为什么它会给您一个单例变量的警告(而不是错误) 为了修复它,您可以编写一些东西来实例化变量Month,如:
summer(Month) :-
weather(jun, _, _, _, _),Month = jun;
weather(jul, _, _, _, _),Month = jul;
weather(aug, _, _, _, _),Month = aug.
在上面对summer/1的定义中,由于您编写了所有案例,您可以看到没有必要使用factsweather(月、日、字1、字2、字3)。
因为您可以编写:
summer(Month) :-
Month = jun;
Month = jul;
Month = aug.
或者@false建议您可以添加以下事实:
summer(jun).
summer(jul).
summer(aug).
夏季(六月)。夏季(七月)。summer(8月)。
甚至summer_月(月):-成员(月,[jun,jul,aug])。
但我更喜欢@false建议的基于事实的方法,因为它们是完全固定的关系。要填写更多信息,可能需要季/月(夏季,六月)。季节/月份(夏季、七月)。。。季节/月份(秋季、九月)…
等。