210 likes | 381 Views
PRAKTIKUM 0 4 SISTEM PAKAR. CLIPS [ lanjutan ] . WildCard Pattern. WildCard Pattern. Used to take the place of a symbol on the left hand side of a rule. ? -> match any one symbol $? -> match zero or more symbols ?name -> only match one symbols. phone .CLP. (deftemplate person
E N D
PRAKTIKUM 04SISTEM PAKAR CLIPS [lanjutan]
WildCard Pattern • Used to take the place of a symbol on the left hand side of a rule. • ? -> match any one symbol • $? -> match zero or more symbols • ?name -> only match one symbols
phone.CLP (deftemplate person (multislot name) (slot phone-number)) (deffacts orang (person (name dimpy adira ratu) (phone-number 12345)) (person (name fani vale rina) (phone-number 67890))) (defrule print-telephone-number (person (name ? ? ?) (phone-number ?phone)) => (printout t ?phone crlf))
bands.CLP • (deftemplatemember_bands (multislot member-of)) • (deffactsnama_band (member_bands (member-of beatlesjohn_lennonpaul_mccartneygeorge_harrisonringo_starr)) (member_bands (member-of who roger_daltreypete_townsendkeith_moon)) (member_bands (member-of ebtgtracey_thornben_watt))) • (defrule bands (member_bands (member-of ?band $?)) => (printout t "there is a band called " ?band crlf))
bands_member.CLP • (deftemplatemember_bands (multislot member-of)) • (deffactsnama_band (member_bands (member-of beatlesjohn_lennonpaul_mccartneygeorge_harrisonringo_starr)) (member_bands (member-of who roger_daltreypete_townsendkeith_moon)) (member_bands (member-of ebtgtracey_thornben_watt))) • (defrule band-members (member_bands (member-of ?band $? ?member $?)) => (printout t ?member " is a member of " ?band crlf))
multi_member.CLP • (deftemplatemember_bands (multislot member-of)) • (deffactsnama_band (member_bands (member-of beatlesjohn_lennonpaul_mccartneygeorge_harrisonringo_starr)) (member_bands (member-of who roger_daltreypete_townsendkeith_moon)) (member_bands (member-of ebtgtracey_thornben_watt))) • (defrule band-members (member_bands (member-of ?band $?members)) => (printout t "The members of " ?band " are " $?members crlf))
variabel.CLP (deftemplate variabel (slot number1) (slot number2)) (deftemplate jumlah (slot total)) (deffacts nilai (variabel (number1 4) (number2 6))) (defrule addup (variabel (number1 ?x) (number2 ?y)) => (bind ?total (+ ?x ?y)) (printout t ?x " + " ?y " = " ?total crlf) (assert (jumlah (total ?total))))
defglobal.CLP (defglobal ?*var1* = 17 ?*oranges* = "seven") (deftemplate variabel (slot number)) (deftemplate jumlah (slot total)) (deffacts nilai (variabel (number 24))) (defrule addup (variabel (number ?x)) => (bind ?total (- ?x ?*var1*)) (printout t ?x " -" ?*var1* " = " ?total "(" ?*oranges* ")" crlf) (assert (jumlah (total ?total))))
Function Templates and Conditions
birthday.CLP (defrule birthday_is ?ulang_tahun <- (ultah (birthday ?name)) ?data-fact <- (personal-data (name ?name) (age ?age)) => (modify ?data-fact (age (+ ?age 1))) (retract ?ulang_tahun))
tes_weight.CLP (deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot blood-pressure)) (deffacts people (personal-data (name Andrew) (age 20) (weight 180) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule lardy-bugger (personal-data (name ?name) (weight ?weight)) (test (> ?weight 100)) => (printout t ?name " weighs " ?weight " kg - the fat sod." crlf))
print_age.CLP (deftemplate personal-data (slot name)(slot age)(slot weight)(slot height)(multislot blood-pressure)) (deffacts people (personal-data (name Andrew) (age 120) (weight 80) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule print-ages (and (personal-data (name ?name) (age ?age)) (personal-data (name ?name) (weight ?weight))) => (printout t ?name " weighs " ?weight " at " ?age " years old." crlf))
umbrella.CLP (deftemplate umbrella (slot weather)) (deffacts cuaca (umbrella (weather raining)) (umbrella (weather snowing)) (umbrella (weather sunny))) (defrule take-an-umbrella (or (umbrella (weather raining)) (umbrella (weather snowing))) => (printout t "Take an umbrella" crlf))
not_birthday.CLP (deftemplate personal-data (slot name) (slot age) (slot weight) (slot height) (multislot blood-pressure)) (deftemplate ultah (slot birthday)) (deffacts is_ultah (ultah (birthday Andrew))) (deffacts people (personal-data (name Andrew) (age 120) (weight 80) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule not-birthday (personal-data (name ?name) (weight ?weight)) (not (ultah (birthday ?name))) => (printout t "It's not " ?name "'s birthday" crlf))
pointless.CLP (defrule pointless (test (> 6 5)) => (printout t "Six is indeed greater than five" crlf))
exist_forall.CLP (deftemplate personal-data (slot name)(slot age)(slot weight)(slot height)(multislot blood-pressure)) (deffacts people (personal-data (name Andrew) (age 20) (weight 80) (height 188) (blood-pressure 130 80)) (personal-data (name Cyril) (age 63) (weight 70) (height 1678) (blood-pressure 180 90))) (defrule person-exists (personal-data (name ?name)) => (printout t "Rule person exists reports there is a person called " ?name crlf))
Lanjutan...... (defrule are-there-people (exists (personal-data (name ?name))) => (printout t "Rule are-there-people reports there is at least one person" crlf)) (defrule check-each-person (forall (personal-data (name ?name) (age ?umur)) (personal-data (name ?name) (weight ?berat))) => (printout t "Rule check-each-person reports that all persons have a name" crlf))
Summary • (deftemplate (slot slotname1) (slot slotname1)) • (and (predicate1) (predicate2)) • (or (predicate1) (predicate2)) • (not (predicate1)) • (test (predicate1)) • (exists (pattern)) • (forall (pattern1) (pattern2) )