All pastes #1961635 Raw Edit

Someone

public text v1 · immutable
#1961635 ·published 2010-10-14 07:26 UTC
rendered paste body
;  ======================================================
; |                    Assignment #1                     |
; |	                                                     |
; |	            Part1: Programming in CLIPS              |
; |                                                      |
; |             by: Amin Allahyar 8923433030             |
; |                                                      |
; |                                                      |
;  ======================================================

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   Questions   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deffacts question-1 (raw-question 1 can canary fly))
(deffacts question-2 (raw-question 2 color-of canary))
(deffacts question-3 (raw-question 3 can ostrich fly))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   Initialization   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defglobal ?*q-number* = 0)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   Knowledge Base   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deffacts knowledge-base
   (have animal skin)
   (have fish gills)
   (have bird wings)
   (do fish lay-eggs) 
   (do bird lay-eggs)
   (dont mammal lay-eggs)
   (dont shark lay-eggs)
   (is shark dangerous)
   (is salmon delicious)
   (is ostrich tall)
   (can bird fly)
   (can fish swim)
   (can ostrich walk)
   (cant ostrich fly)
   (is-kind-of fish animal)
   (is-kind-of bird animal)
   (is-kind-of mammal animal)
   (is-kind-of shark fish)
   (is-kind-of salmon fish)
   (is-kind-of canary bird)
   (is-kind-of ostrich bird)
  (color-is canary yellow)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   Inference Engine   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defrule question-feeder ""
	(not (question $?))
	?raw<-(raw-question ?*q-number* $?rest)
	;?raw<-(raw-question ?y&:(> ?y ?*q-number*) $?rest)
	=>
	(bind ?*q-number* (+ ?*q-number* 1))
	(retract ?raw)
	(assert (question $?rest))
)

(defrule can-fly ""
	?question <-(question can ?animal-name fly)
	(can ?animal-name fly)
	=>
	(retract ?question)
	(printout t "Yes, '" ?animal-name "' can fly!" crlf)
)
(defrule can-subtype-fly ""
	?question <-(question can ?animal-name fly)
	(is-kind-of ?animal-name ?animal-type)
	(can ?animal-type fly)
	=>
	(retract ?question)
	(printout t "Yes, '" ?animal-type "' can fly, and '" ?animal-name "' is a '" ?animal-type "'" crlf)
)
(defrule can-subsubtype-fly ""
	?question <-(question can ?animal-name fly)
	(is-kind-of ?animal-name ?animal-subtype)
	(is-kind-of ?animal-subtype ?animal-type)
	(can ?animal-type fly)
	=>
	(retract ?question)
	(printout t "Yes, '" ?animal-type "' can fly, and '"?animal-subtype "' is a '" ?animal-type "', also '" ?animal-name "' is a '" ?animal-subtype "'" crlf)
)
(defrule cant-fly ""
	(declare (salience -100))
	?question <-(question can ?animal-name fly)
	(cant ?animal-name fly)
	=>
	(retract ?question)
	(printout t "'" ?animal-name "' cant fly." crlf)
)
(defrule error-can-fly ""
	(declare (salience -100))
	(question can ?animal-name fly)
	=>
	(printout t "There is no information about flying '" ?animal-name "'" crlf)
)
(defrule color-of ""
	?question <-(question color-of ?animal-name)
	(color-is ?animal-name ?color)
	=>
	(retract ?question)
	(printout t "The color of '" ?animal-name "' is '" ?color "'" crlf)
)
(defrule error-color-of ""
	(declare (salience -100))
	(question color-of ?animal-name)
	=>
	(printout t "There is no information about color of '" ?animal-name "'" crlf)
)