如何在CLIPS中进行两组之间的补集和差集运算?

问题描述 投票:0回答:1

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

谢谢,我有一个例子,做两组之间的联合,我可以重用这个代码来做这两个其他的操作。

logic clips
1个回答
0
投票

工会的例子,我已经是。

(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)))

具体来说,程序的哪个部分应该被修改?谢谢


0
投票

下面是你如何计算这三者,不修改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> 
© www.soinside.com 2019 - 2024. All rights reserved.