首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLIPS:或条件元素,其计算结果为TRUE当且仅当其内部模式中有2个或更多为真。

CLIPS:或条件元素,其计算结果为TRUE当且仅当其内部模式中有2个或更多为真。
EN

Stack Overflow用户
提问于 2021-03-13 16:27:34
回答 1查看 52关注 0票数 0

如果匹配了一个或多个模式,则正常(或)元素的计算结果为真:

代码语言:javascript
复制
(or
    (object (name name-1))
    (object (name name-2))
    (object (name name-3))
    (object (name name-4))
)

问题是:如果2、或更多的模式匹配,是否有一种简单的方法来创建一个修改(或)元素,计算结果为TRUE?

当然,这种愚蠢的野蛮做法会是这样的,但我相信还有一种更顺畅的方法。

代码语言:javascript
复制
(or
    (and
        (object (name name-1))
        (object (name name-2))
    )
    (and
        (object (name name-1))
        (object (name name-3))
    )
    (and
        (object (name name-1))
        (object (name name-4))
    )
    (and
        (object (name name-2))
        (object (name name-3))
    )

    ...

)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-13 18:55:58

如果您试图匹配两个以上的对象,那么使用相同数量的模式,并通过调用实用程序函数放弃无关的排列:

代码语言:javascript
复制
         CLIPS (6.31 6/12/19)
CLIPS> (defclass X (is-a USER))
CLIPS>  
(definstances Xs
   (name-0 of X)
   (name-1 of X)
   (name-3 of X)
   (name-4 of X)
   (name-5 of X))
CLIPS>      
(deffunction in-order (?n1 ?n2)
   (< (str-compare ?n1 ?n2) 0))
CLIPS>    
(defrule r1
   (object (name ?name1&[name-1] | [name-2] | [name-3] | [name-4]))
   (object (name ?name2&[name-1] | [name-2] | [name-3] | [name-4]))
   (test (in-order ?name1 ?name2))
   =>)
CLIPS>    
(defrule r2
   (exists
      (object (name ?name1&[name-1] | [name-2] | [name-3] | [name-4]))
      (object (name ?name2&[name-1] | [name-2] | [name-3] | [name-4])) 
      (test (in-order ?name1 ?name2)))
   =>)
CLIPS> (reset)
CLIPS> (agenda)
0      r1: [name-1],[name-4]
0      r1: [name-3],[name-4]
0      r1: [name-1],[name-3]
0      r2: *
For a total of 4 activations.
CLIPS> 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66615881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档