1 of 19

PRAKTIKUM 03� SISTEM PAKAR

CLIPS [again]

2 of 19

WildCard Pattern

3 of 19

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

4 of 19

bands.CLP

  • (deftemplate member_bands

(multislot member-of))

  • (deffacts nama_band

(member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr))

(member_bands (member-of who roger_daltrey pete_townsend keith_moon))

(member_bands (member-of ebtg tracey_thorn ben_watt)))

  • (defrule bands

(member_bands (member-of ?band $?))

=>

(printout t "there is a band called " ?band crlf))

5 of 19

bands_member.CLP

  • (deftemplate member_bands

(multislot member-of))

  • (deffacts nama_band

(member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr))

(member_bands (member-of who roger_daltrey pete_townsend keith_moon))

(member_bands (member-of ebtg tracey_thorn ben_watt)))

  • (defrule band-members

(member_bands (member-of ?band $? ?member $?))

=>

(printout t ?member " is a member of " ?band crlf))

6 of 19

multi_member.CLP

  • (deftemplate member_bands

(multislot member-of))

  • (deffacts nama_band

(member_bands (member-of beatles john_lennon paul_mccartney george_harrison ringo_starr))

(member_bands (member-of who roger_daltrey pete_townsend keith_moon))

(member_bands (member-of ebtg tracey_thorn ben_watt)))

  • (defrule band-members

(member_bands (member-of ?band $?members))

=>

(printout t "The members of " ?band " are " $?members crlf))

7 of 19

VARIABEL

8 of 19

variabel.CLP

(deftemplate variabel

(slot number))

(deftemplate jumlah

(slot total))

(deffacts nilai

(variabel (number 4))

(variabel (number 6)))

(defrule addup

(variabel (number ?x))

(variabel (number ?y))

=>

(bind ?total (+ ?x ?y))

(printout t ?x " + " ?y " = " ?total crlf)

(assert (jumlah (total ?total))))

9 of 19

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

10 of 19

Function

Templates and Conditions

11 of 19

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

12 of 19

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

13 of 19

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

14 of 19

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

15 of 19

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

16 of 19

pointless.CLP

(defrule pointless

(test (> 6 5))

=>

(printout t "Six is indeed greater than five" crlf))

17 of 19

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

18 of 19

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

19 of 19

Summary

  • (deftemplate (slot slotname1) (slot slotname1))
  • (and (predicate1) (predicate2))
  • (or (predicate1) (predicate2))
  • (not (predicate1))
  • (test (predicate1))
  • (exists (pattern))
  • (forall (pattern1) (pattern2) )