سؤال

أنا أقوم بتمرين وأين أحتاج إلى إنشاء نظام بسيط لمطابقة وكالات المواعدة.حاليًا كل شخص لديه هواية واحدة، والهوايات عبارة عن فئات حسب النشطة وغير النشطة وإذا كانت الهوايتان متطابقتين وكان الشخصان من جنسين مختلفين، تعتقد وكالة المواعدة أن هذه الهوايات متطابقة للأشخاص.

لذا فأنا الآن بحاجة إلى أن يكون النظام قادرًا على السماح لهوايات متعددة ولكن يبدو أنني لا أستطيع أن أفهم هذا الأمر.

وهنا ما لدي:

(deftemplate MAIN::person
    (slot name)
    (slot age)
    (multislot hobby)
    (slot town)
    (slot sex))

(person (name "Jane")
        (age 25)
        (hobby fashion gardening)
        (town montrose)
        (sex female))

(deffacts hobby_types "Hobby categories"
    (hobby_type gardening active)
    (hobby_type swinging active)
    (hobby_type reading inactive)
    (hobby_type fashion inactive)
)

(defrule compatible_hobbies
    (opposite_sex ?name1 ?name2)
    (person (name ?name1) (hobby ?hobby1))
    (person (name ?name2) (hobby ?hobby2))
    (hobby_type ?hobby1 ?type)
    (hobby_type ?hobby2 ?type)
    =>
    (assert (hobbies_match ?name1 ?name2))
)

لذا، أولاً، هل أقوم بإعلان الحقل متعدد الفتحات بشكل صحيح؟وكيف يمكنني ضبط قاعدة "الهوايات المتوافقة" الخاصة بي لتتناسب مع أي من الهوايات التي قد يمتلكها الشخص؟

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

المحلول

تم الإعلان عن هواية متعددة الفتحات شخصيًا بشكل صحيح.لكن قاعدتك لن تتطابق مع الهوايات بشكل صحيح وستطابق نفس الحقيقة مع نفس الحقيقة التي توضح أن جين متوافقة مع جين.في الواقع، إذا تطابقت القاعدة مع الحقائق، فإنها ستولد المنتج الديكارتي لحقائق الشخص (أو عددًا كبيرًا من التطابقات غير المرغوب فيها).

لقد قمت بتعديل القاعدة إلى:

(defrule compatible_hobbies (person (name ?n1) (hobby $? ?h1 $?)) (person (name ?n2) (hobby $? ?h1 $?)) (hobby_type ?h1 ?x) (test (neq ?n1 ?n2)) => (assert (hobbies_compatible ?n1 ?n2)) )

لذلك إذا أكدت حقائق شخصين مثل

(person (name "Jane") (hobby blah1 gardening blah2)) و (person (name "Jim") (hobby blah3 gardening blah4)) عندها سيتم تفعيل القاعدة وسيتم تأكيد الحقيقة (الهوايات_المتوافقة مع جيم جين) (وكذلك الحقيقة (الهوايات_المتوافقة مع "جيم" "جين")).

حرف البدل $؟المتغير يطابق مجموعة من الرموز السابقة واللاحقة للهواية المطابقة المطلوبة.من المحتمل أيضًا أن تكون حقيقة الجنس الآخر بمثابة اختبار وليس حقيقة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top