Prolog条件语句
假设我们得到了某些事实,我们应该写一条特定的规则,探索这些事实中的特定条件,例如,如果我们得到了某些气候及其特征:Prolog条件语句,prolog,Prolog,假设我们得到了某些事实,我们应该写一条特定的规则,探索这些事实中的特定条件,例如,如果我们得到了某些气候及其特征: climate(jun, 20, snow, wind, cold). climate(jul, 20, hot, dry, calm). climate(sep, 15, calm, dry, cool). climate(sep, 16, rain, hot, calm). climate(sep, 18, warm, rain, calm). climate(oct, 29,
climate(jun, 20, snow, wind, cold).
climate(jul, 20, hot, dry, calm).
climate(sep, 15, calm, dry, cool).
climate(sep, 16, rain, hot, calm).
climate(sep, 18, warm, rain, calm).
climate(oct, 29, cool, dry, calm).
climate(nov, 1, cold, snow, wind).
climate(nov, 5, hot, snow, wind).
climate(dec, 15, warm, rain, wind).
climate(dec, 21, wind, cold, dry).
如果我们想知道哪些气候是炎热干燥的,我们会这样做:
climatecheck(Month) :-
climate(Month, _, hot, _, _);
climate(Month, _, _, hot, _);
climate(Month, _, _, _, hot),
climate(Month, _, dry, _, _);
climate(Month, _, _, dry, _);
climate(Month, _, _, _, dry).
我试过上面的方法,但似乎不起作用
而不是给我:
Month = jul.
它给了我所有的月份,无论是炎热还是干燥的气候
尽管用“and”和“and”或“or”条件句概括了每个特征的具体位置,我还能做错什么呢?多谢各位 在计算谓词时使用括号强制优先:
climatecheck(Month) :-
( climate(Month, _, hot, _, _)
; climate(Month, _, _, hot, _)
; climate(Month, _, _, _, hot)
),
( climate(Month, _, dry, _, _)
; climate(Month, _, _, dry, _)
; climate(Month, _, _, _, dry)
).
您使用的是哪个版本的prolog?我刚试过你的密码,我得到了正确的答案。。。不同的编译器可能以不同的顺序处理运算符优先级,请使用括号来强制执行。事实似乎没有很好的逻辑组织。我想你可能会有一个不同的气候条件集合,在这种情况下,你会有一个小列表,比如
气候(6月20日,[炎热,干燥,微风])
。如果总有3种情况(如您所示),但每种情况都属于特定类别,则应将它们分配到固定的可变位置:气候(月、日、风、温度、降水量)
。然后您的谓词变为climatecheck(Month):-climate(Month,u,u,hot,dry)。
Oh my。。。感谢大师班:-)从某种意义上说,这不可能是OP所要求的-它需要Month
成为气候/5的主键
climatecheck(Month) :-
climate(Month, _, X, Y, Z),
% overkill generalization ahead :)
maplist([P]>>memberchk(P, [X,Y,Z]), [hot, dry]).
?- climatecheck(Month).
Month = jul ;
false.