dram.me

CLIPS中的multifield展开

补遗

  1. Perl与CLIPS类似,数组不支持嵌套,所以在调用函数前会自动展开传入的数组参数。—— 2017-09-25

multifield作为最核心的复合类型,CLIPS对其有很好的支持。其中一点就是展开(expansion)。

在规则的模式匹配中,如果在变量前加$,可以匹配多个值,而在随后使用该变量时,如果前面同样加$,这些值将自动展开。

有一点值得注意的是,默认情况下,CLIPS只在模式匹配中对此有展开的处理,而在RHS的函数调用中,则需要通过set-sequence-operator-recognition设置开启。

另外一点是,由于multifield不支持嵌套,所以在其他一些地方,也会有自动展开的处理。例如向create$传入multifield不会生成嵌套的multifield值,而是被flatten了。而bind中,传入多个值时,也是会做类似的处理。还有在可变参数中,也有类似的处理(这里printoutformat等原生函数是一个例外,向其传入multifield不会被自动展开,具体原因还需要进一步确认)。