Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα, εχουμε μια εργασια στη σχολη και πρεπει να φτιαξουμε ενα προγραμμα στην clips το οποιο αφου περασεις τα αυτοκίνητα στα γεγονοτα, μετα απο ερωτησεις να σου απανταει ποιο σου ταιριαζει.

Ετσι, αφου περναω τα γεγονοτα και γραφω τους κανονες, μου δημιουργουνται τα εξης θεματα:
1. αρχικα, επειδη δεν μας εχει πει και πολλα και μας αφησε στην τυχη μας ο καθηγητης, ο τροπος για να γινει αυτο ειναι αντριστροφα; δηλαδη να κανει retract το γεγονος που δε ταιριαζει;
2. αν ισχυει το 1, τοτε:
   2α υπαρχει τροπος να βρισκει μονο του το τι πρεπει να κανει retract και να μη γραφω τα γεγονοτα που δε θελουμε; (σε μια τεραστια βαση γεγονοτων ειναι αδυνατο να κατσεις να γραψεις τα γεγονοτα που θες να πεταει εξω).
   2β τι πρεπει να κανω για να δινει ΠΑΝΤΑ αποτελεσμα; (πχ αν ο χρηστης δωσει type family και price high τοτε δε βγαζει αποτελεσμα.. υπαρχει καποιος τροπος ωστε να λεει πχ: δοκιμασε ξανα και να τον βγαζει στην αρχη;
    2γ με ποιον τροπο (εκτος απο το να κανω νεο κανονα οπως εχω τερμα κατω, με το να γραφω απλα (facts) και να τα βγαζει) εχει αλλο τροπο να βγαζει αυτα που εμειναν;

σας ευχαριστω εκ των προτερων.

Υ.Γ. επισυναπτω στο spoiler τον κωδικα μου.

(deftemplate car_template
(slot brand_name (type STRING))
(slot type (type STRING)(allowed-symbols family city super))
(slot price (type SYMBOL) (allowed-symbols low mid high))
;;; low = 0-10000 mid = 10001-20000 high = 20001-10000
(slot performance (type SYMBOL) (allowed-symbols low mid high))
(slot equipment (type SUMBOL) (allowed-symbols low mid high))
)

(deffacts car_facts

(car (brand_name "Opel Astra")(type family)(price mid)(performance low)
(car (brand_name "Peugeot 106a")(type city)(price low)(performance high)
(car (brand_name "Mercedes E200")(type super)(price high)(performance mid)
(car (brand_name "Rover 25")(type family)(price mid)(performance mid)
(car (brand_name "Ferrari F40")(type super)(price high)(performance high)
)


(defrule type_rule
(initial-fact)

=>

(printout t "Give the Type you want (possible options: family city super): "
(bind ?response (read))
(if (eq ?response family) then
;;;retracting city
(retract 2)
;;;rectarting super
(retract 3 5)
else (if (eq ?response city) then
;;;retracting family
(retract 1 4)
;;;rectarting super
(retract 3 5)
else
;;;retracting city
(retract 2)
;;;retracting family
(retract 1 4)
))))


(defrule price_rule
(initial-fact)

=>

(printout t "Give the price you want (possible options: low mid high): "
(bind ?response (read))
(if (eq ?response low) then
;;;retracting mid
(retract 1 4)
;;;rectarting high
(retract 3 5)
else (if (eq ?response mid) then
;;;retracting low
(retract 2)
;;;rectarting high
(retract 3 5)
else
;;;retracting mid
(retract 1 4)
;;;retracting low
(retract 2)))))


(defrule performance_rule
(initial-fact)

=>

(printout t "Give the performance you want (possible options: low mid high): "
(bind ?response (read))
(if (eq ?response low) then
;;;retracting mid
(retract 3 4)
;;;rectarting high
(retract 2 5)
else (if (eq ?response mid) then
;;;retracting low
(retract 1)
;;;rectarting high
(retract 2 5)
else
;;;retracting mid
(retract 3 4)
;;;retracting low
(retract 1)
))))


(defrule print_facts
(initial-fact)

=>

(printout t "The car that fits you is: "
(facts)
)
)

 

Δημοσ.

Βρήκες λύση στο πρόβλημα σου;

Ο τρόπος που το προσέγγισες δεν είναι ο σωστός. Όπως είπες και εσύ αν υπήρχαν 5000 πχ γεγονότα, θα έπρεπε να σβήσεις όλα τα γεγονότα και να κάνεις τόσα if then else;

Βρίσκεις τα γεγονότα που ταιριάζουν στο στόχο του προβλήματος.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...