Frage

Ich mache eine Übung und wohin ich ein einfaches Dating-Agentur-Matching-System erstellen muss.Derzeit hat jede Person ein Hobby, Hobbys sind Kategorien von aktiv und inaktiv, und wenn die beiden Hobbys übereinstimmen und die beiden Personen gegenüber dem Sex haben, denkt die Dating-Agentur, dass diese an Personen ein Match sind.

So brauche ich jetzt, dass das System mehrere Hobbys zulassen kann, aber ich kann nicht den Kopf dazu bringen.

hier, was ich habe:

generasacodicetagpre.

Also zuerst, deklariere ich das Multislot-Feld richtig?Und wie passt ich meine compatible_hobbies-Regel an, um mit einem der Hobbys zusammenzupassen, den eine Person hätte?

War es hilfreich?

Lösung

Das Multislot-Hobby persönlich wird korrekt deklariert.Ihre Regel stimmt jedoch nicht korrekt mit den Hobbys an und würde derselben Tatsache mit der gleichen Tatsache übereinstimmen, die zeigt, dass Jane mit Jane kompatibel ist.Eigentlich, wenn die Regel übereinstimmte, würde dies das kartesische Produkt der Persönlichkeitsfakten erstellen (oder eine große Anzahl von nicht gewünschten Übereinstimmungen).

Ich habe die Regel geändert an:

(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)) )

wenn Sie also zwei Personenfakten wie

behaupten

(person (name "Jane") (hobby blah1 gardening blah2)) und (person (name "Jim") (hobby blah3 gardening blah4)), dann wird die Regel feuern und die Tatsache (Hobbies_Compatible Jim Jane) wird behauptet (sowie die Tatsache (Hobbies_Compatibles "Jim" Jane ")).

Die Wildcard $?Variable übereinstimmt mit einem Satz von Symbolen, die vorangehenden und dem gewünschten passenden Hobby folgen.Ihre entgegengesetzte Tatsache sollte wahrscheinlich auch ein Test anstelle von Tatsachen sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top