簡體   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