КЛИПЫ: совпадают, когда значение не в мультислоте - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь написать правило, которое будет соответствовать, когда определенное значение отсутствует в мультислоте, а затем добавить к нему это значение.

(deftemplate person
    (multislot packing_list
    (type SYMBOL)
    (default ?DERIVE)))

(defrule apply_adapter
    (travel international)
    ?p <- (person (packing_list $? ~travel_adaptor ))
    =>
    (modify ?p (packing_list travel_adaptor)))
    (println "Added to list" crlf)
)

(deffacts start
    (travel international)
    (person)
)

Две части этого, я знаю, не верны:

  1. ?p <- (person (packing_list $? ~travel_adaptor )) не запускает правило - каков правильный синтаксис?
  2. (modify ?p (packing_list travel_adaptor))), вероятно, не делает то, что я хочу, то есть вставить значение, а незаменить список.

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 26 сентября 2018
         CLIPS (Cypher Beta 8/21/18)
CLIPS> 
(deftemplate person
   (multislot packing_list
      (type SYMBOL)
      (default ?DERIVE)))
CLIPS> 
(defrule apply_adapter
   (travel international)
   ?p <- (person (packing_list $?pl))
   (test (not (member$ travel_adaptor ?pl)))
   =>
   (modify ?p (packing_list ?pl travel_adaptor))
   (println "Added to list"))
CLIPS> 
(deffacts start
   (travel international)
   (person))
CLIPS> (reset)
CLIPS> (run)
Added to list
CLIPS> (facts)
f-1     (travel international)
f-2     (person (packing_list travel_adaptor))
For a total of 2 facts.
CLIPS> 
...