假设我们得到某些事实,并且应该编写一条规则,探索这些事实中的给定条件,例如,如果我们得到某些气候及其特征:

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)
   ).

10-08 17:11