【问题标题】:Clips: comparing facts between each other剪辑:相互比较事实
【发布时间】:2016-12-21 04:39:10
【问题描述】:

我正在尝试创建一个专家系统,每次用户回答问题时都会创建一个新事实(例如):

assert(like accion yes)
assert(like multi yes)

完成后,它会显示在描述中包含这些事实的每个游戏的名称:

(deffacts gaming (game Call_of_Duty multi accion)
(game BattleField multi strategy))

我尝试使用此规则,检查是否每个“相似事实”都位于特定的“游戏事实”内,但它不起作用:

(defrule conclusion
   (like $?x yes)
   (game ?y $?x2)
   (test(member$ ?x ?x2))
   =>
   (printout t "You like the game: " ?y crlf))

【问题讨论】:

    标签: clips


    【解决方案1】:

    您可以通过以下三种不同的方式编写规则。您的原始规则,conclusion-1,将为每个与游戏匹配的类似打印一条消息,因此您可以获得每个游戏的多个打印。如果至少有一个与游戏匹配的游戏,则规则结论 2 打印游戏。最多你会看到一个游戏打印一次。规则结论 3 仅在匹配该游戏的所有点赞时才会打印该游戏。

    CLIPS> 
    (deffacts gaming 
       (like accion yes)
       (like multi yes)
       (game Call_of_Duty multi accion)
       (game BattleField multi strategy))
    CLIPS>    
    (defrule conclusion-1
       (like $?x yes)
       (game ?y $?x2)
       (test(member$ ?x ?x2))
       =>
       (printout t "1 You like the game: " ?y crlf))
    CLIPS>    
    (defrule conclusion-2
       (game ?y $?x2)
       (exists (like $?x yes)
               (test (member$ ?x ?x2)))
       =>
       (printout t "2 You like the game: " ?y crlf))
    CLIPS>    
    (defrule conclusion-3
       (game ?y $?x2)
       (forall (like $?x yes)
               (test (member$ ?x ?x2)))
       =>
       (printout t "3 You like the game: " ?y crlf))
    CLIPS> (reset)
    CLIPS> (run)
    1 You like the game: BattleField
    2 You like the game: BattleField
    1 You like the game: Call_of_Duty
    1 You like the game: Call_of_Duty
    2 You like the game: Call_of_Duty
    3 You like the game: Call_of_Duty
    CLIPS> 
    

    【讨论】:

    • 谢谢,真的很有帮助
    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2013-01-24
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多