2016-12-21 3 views
0

Я пытаюсь создать экспертную систему, которая каждый раз, когда пользователь отвечает на вопрос, создает новый факт (к примеру):Клипы: сравнение фактов между собой

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

И однажды его сделали, это показывает название каждой игры есть те факты, в их описании:

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

Я попытался с помощью этого правила, когда я проверяю, если каждый «как-то,» находится внутри especific «игра-факт», но не работает:

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

ответ

0

Вот три способа, которыми вы можете написать правило. Ваше исходное правило, заключение-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> 
+0

Спасибо, это было действительно полезно – Str8noobish

Смежные вопросы