繁体   English   中英

如何在CLIPS中进行两组的补差运算?

[英]How to make the complement and difference operation between two sets in CLIPS?

我需要在两组之间进行补差运算。 我有一个例子,要在两组之间进行联合,我可以重用这段代码来进行这两个其他操作。

谢谢

我的工会示例是:

(deffacts datos-iniciales
(conjunto B C A D E E B C E)
(conjunto E E B F D E))

(defrule inicio
=>
(assert (union)))
(defrule union
?h <- (union $?u)
(conjunto ? $? ?e $?)
(not (union $? ?e $?))
=>
(retract ?h)
(assert (union ?e $?u)))

具体来说,应该改变程序的哪一部分? 谢谢

以下是如何计算所有三个而不修改 set-1 和 set-2 事实,忽略重复成员并对结果进行排序。

         CLIPS (6.31 6/12/19)
CLIPS> 
(deffacts datos-iniciales
   (set-1 B C A D E E B C E)
   (set-2 E E B F D E))
CLIPS>    
(deffacts universe
   (universe A B C D E F G H I J K))
CLIPS>    
(deffunction str-sort (?a ?b)
   (> (str-compare (sym-cat ?a) (sym-cat ?b)) 0))
CLIPS>    
(defrule calcula
   =>
   (assert (union)
           (complement)
           (difference)))
CLIPS> 
(defrule add-to-union
   ?union <- (union $?u)
   (or (set-1 $? ?v $?)
       (set-2 $? ?v $?))
   (test (not (member$ ?v ?u)))
   =>
   (retract ?union)
   (assert (union ?u ?v)))
CLIPS>    
(defrule add-to-complement
   ?complement <- (complement $?c)
   (universe $?u1 ?v $?u2)
   (set-1 $?s)
   (test (and (not (member$ ?v ?c))
              (not (member$ ?v ?s))))
   =>
   (retract ?complement)
   (assert (complement ?c ?v)))
CLIPS> 
(defrule add-to-difference
   ?difference <- (difference $?d)
   (set-1 $? ?v $?)
   (set-2 $?set2)
   (test (and (not (member$ ?v ?d))
              (not (member$ ?v ?set2))))
   =>
   (retract ?difference)
   (assert (difference ?d ?v)))
CLIPS> 
(defrule write-union
   (declare (salience -10))
   (union $?u)
   =>
   (printout t "The union is " (sort str-sort ?u) crlf))
CLIPS>    
(defrule write-complement
   (declare (salience -10))
   (complement $?c)
   =>
   (printout t "The complement is " (sort str-sort ?c) crlf))
CLIPS> 
(defrule write-difference
   (declare (salience -10))
   (difference $?d)
   =>
   (printout t "The difference is " (sort str-sort ?d) crlf))
CLIPS> (reset)
CLIPS> (run)
The union is (A B C D E F)
The complement is (F G H I J K)
The difference is (A C)
CLIPS> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM