سؤال

كيف تختبر وجود حقيقة في RHS من القواعد في دبابيس؟ أحاول تصميم قاعدة "من شأنها أن تسجل" الحالة الحالية من خلال حساب عدد حقائق الأهداف الموجودة. من الواضح كيفية اختبار الحقائق في LHS ، لكن لا يمكنني العثور على كيفية القيام بما يعادلها في RHS.

أريد أن أفعل شيئًا كهذا ، على الرغم من أن هذا ليس رمز مقاطع صالح:

(defrule score-state ""
    ?score <- (score (value ?value))
    =>
    (modify ?score (value (+ (exists (goal-1)) (exists (goal-2)) (exists (goal-3))))))

بحيث إذا لم يكن هناك أي حال من حالات الهدف ، فستوجد الحقيقة (النتيجة (القيمة 0)). على العكس ، إذا كانت جميع حالات الهدف موجودة ، فستوجد الحقيقة (النتيجة (القيمة 3)).

يذكر الدليل المرجعي وظيفة الوظيفة ، ولكن يبدو أن هذا يتطلب إقرار عنوان حقيقة. حاولت استخدامه مثل (Fact-Existp (الهدف 1)) ، لكن المقاطع تعطيني خطأ في بناء الجملة.

هل كانت مفيدة؟

المحلول

(deftemplate score
   (slot value))

(deftemplate goal-1)

(deftemplate goal-2)

(deftemplate goal-3)

(deffacts start
   (score (value undefined))
   (goal-1)
   (goal-3))

(deffunction ecount (?g)
   (if (any-factp ((?f ?g)) TRUE)
      then (return 1)
      else (return 0)))

(defrule score-state ""
    ?score <- (score (value undefined))
    =>
    (modify ?score (value (+ (ecount goal-1) (ecount goal-2) (ecount goal-3)))))
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top