代码之家  ›  专栏  ›  技术社区  ›  Captain Whippet

片段:值不在多时隙中时匹配

  •  0
  • Captain Whippet  · 技术社区  · 6 年前

    我正在尝试编写一个规则,当某个值不在多时隙中时,该规则将匹配,然后将该值添加到该规则中。

    (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 回复  |  直到 6 年前
        1
  •  2
  •   Gary Riley    6 年前
             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>