前面在pyke引擎的总结文章中多次提到pyke是为了寻找一个集合中的组合方式而构建的推理引擎。在一种方式里,我们可以通过kfb文件或者_assert,add_universal_fact等方法去声明很多事实。但在构建一些规则的时候,我们需要一个模式去在一些其他方式构建的集合中去遍历。例如我们需要某一个对象遍历从0到10之间所有的数字,来检验一些规则。在这种情况下,我们就需要使用$pattern in python_iterable这样的方式来创建遍历集合了。使用规则示例如下:
test
use test($pair)
when
$first in [0,1,2,3,4]
$second in ['a', 'b', 'c']
$pair = str($first) + '_' + $second
测试结果:(with engine.prove_goal(<rule_base>.test($pair)) as gen: ....)
result: {'pair': '0_a'}
result: {'pair': '0_b'}
result: {'pair': '0_c'}
result: {'pair': '1_a'}
result: {'pair': '1_b'}
result: {'pair': '1_c'}
result: {'pair': '2_a'}
result: {'pair': '2_b'}
result: {'pair': '2_c'}
result: {'pair': '3_a'}
result: {'pair': '3_b'}
result: {'pair': '3_c'}
result: {'pair': '4_a'}
result: {'pair': '4_b'}
result: {'pair': '4_c'}