假设我有以下规则:
?- assert(test(5,2) :- true).
true.
?- assert(test(5,3) :- true).
true.
?- assert(test(5,4) :- true).
true.
?- test(5,K).
K = 2 ;
K = 3 ;
K = 4.
?- findall(K,test(5,K), L).
L = [2, 3, 4].
我可以找到所有的解决方案。但我想要一些不同的东西。
在这种情况下" 5"是条件,第二个词K是SCORE。
我想找到符合" 5"的所有规则,但能够选择要执行的规则, 基于SCORE。目前最高分数" 4"。
理想情况下,我想获得所有匹配规则的列表,并随机选择一个得分较高的规则。 这意味着我需要将规则作为结构取回,以便我可以通过算法选择其中一个。
我该怎么做?
我想模拟生产系统(IF-THEN规则),其中每个规则都有一个分数。规则的负责人应该扮演IF部分。 在根据分数选择规则之前,不应执行THEN部分!
答案 0 :(得分:2)
如果我已正确理解您的问题,那么您的出发点就是将clause/2谓词与findall
结合使用以获取所有可能的分数,然后找到最大分数并拨打您的{{1} }谓词及其值:
test/2
PS:我假设您使用Swi-Prolog。