假设我们得到某些事实,并且应该编写一条规则,探索这些事实中的给定条件,例如,如果我们得到某些气候及其特征:
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.
它给了我所有天气炎热或干燥的月份。
尽管用“和”和“或”条件概述了每个特征的特定位置,但我该怎么做呢?谢谢。
最佳答案
使用括号强制评估谓词的优先级:
climatecheck(Month) :-
( climate(Month, _, hot, _, _)
; climate(Month, _, _, hot, _)
; climate(Month, _, _, _, hot)
),
( climate(Month, _, dry, _, _)
; climate(Month, _, _, dry, _)
; climate(Month, _, _, _, dry)
).