Клипы, как я могу подвести итог слотов фактов - PullRequest
0 голосов
/ 21 мая 2018

Допустим, у меня есть следующие две deftemplates:

(deftemplate total-crop-yield-quality (slot primary_key) (slot quality))
(deftemplate total-fertilizer-quality (slot primary_key) (slot quality))

и следующие недостатки:

   (deffacts tQuality 
    (total-crop-yield-quality (primary_key 1) (quality 10))
    (total-crop-yield-quality (primary_key 2) (quality 7))
    (total-crop-yield-quality (primary_key 3) (quality 9))
    (total-crop-yield-quality (primary_key 4) (quality -2)))

   (deffacts fQuality 
    (total-fertilizer-quality (primary_key 1) (quality 4))
    (total-fertilizer-quality (primary_key 2) (quality 0))
    (total-fertilizer-quality (primary_key 3) (quality 2))
    (total-fertilizer-quality (primary_key 4) (quality 5)))

Как бы я суммировал общее для всех качеств обоих дефектов водна переменная?

(defrule determine-total-quality
  =>
 //code here to add quality to a variable)

1 Ответ

0 голосов
/ 21 мая 2018
         CLIPS (6.31 2/3/18)
CLIPS> (deftemplate total-crop-yield-quality (slot primary_key) (slot quality))
CLIPS> (deftemplate total-fertilizer-quality (slot primary_key) (slot quality))
CLIPS> 
(deffacts tQuality 
   (total-crop-yield-quality (primary_key 1) (quality 10))
   (total-crop-yield-quality (primary_key 2) (quality 7))
   (total-crop-yield-quality (primary_key 3) (quality 9))
   (total-crop-yield-quality (primary_key 4) (quality -2)))
CLIPS> 
(deffacts fQuality 
   (total-fertilizer-quality (primary_key 1) (quality 4))
   (total-fertilizer-quality (primary_key 2) (quality 0))
   (total-fertilizer-quality (primary_key 3) (quality 2))
   (total-fertilizer-quality (primary_key 4) (quality 5)))
CLIPS>    
(defrule determine-total-quality
  =>
  (bind ?sum 0)
  (do-for-all-facts ((?f total-crop-yield-quality)) TRUE
     (bind ?sum (+ ?sum ?f:quality)))
  (printout t "Crop Yield Quality: " ?sum crlf)
  (bind ?sum 0)
  (do-for-all-facts ((?f total-fertilizer-quality)) TRUE
     (bind ?sum (+ ?sum ?f:quality)))
  (printout t "Fertilizer Quality: " ?sum crlf))
CLIPS> (reset)
CLIPS> (run)
Crop Yield Quality: 24
Fertilizer Quality: 11
CLIPS> 
...