home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
scripts
/
ckermit
/
cheetah
< prev
next >
Wrap
Text File
|
2004-05-18
|
6KB
|
257 lines
# From: "Dat Nguyen" <thucdat@hotmail.com>
# Subject: Module cheetah
# Date: Wed, 19 May 2004 01:16:37 -0400
#
# Animal Taxonomy is a favorite subject of specialized rule-based programming
# languages. With some creative construction, C-Kermit can solve that problem
# in the same manner. The cheetah.kr script exposes the same look and feel of
# many rule-based programs. Many configuration problems in computer
# administration and network should be solvable similarly, provided the rule
# set can be identified.
#
# This demonstration comes in two modules: rule-engine and cheetah.
# To run the demonstration, tell Kermit to TAKE the cheetah module.
#
# Here is cheetah:
take rule-engine
define rule_1 {
(if (AND
(isThisFactTrue '(the animal has hair))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a mammal))
(1)
)
(0)
)
}
define rule_2 {
(if (AND
(isThisFactTrue '(the animal gives milk))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a mammal))
(1)
)
(0)
)
}
define rule_3 {
(if (AND
(isThisFactTrue '(the animal has feathers))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a bird))
(1)
)
(0)
)
}
define rule_4 {
(if (AND
(isThisFactTrue '(the animal flies))
(isThisFactTrue '(the animal lays eggs))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a bird))
(1)
)
(0)
)
}
define rule_5 {
(if (AND
(isThisFactTrue '(the animal is a mammal))
(isThisFactTrue '(the animal eats meat))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a carnivore))
(1)
)
(0)
)
}
define rule_6 {
(if (AND
(isThisFactTrue '(the animal is a mammal))
(isThisFactTrue '(the animal has pointed teeth))
(isThisFactTrue '(the animal has claws))
(isThisFactTrue '(the animal's eyes point forward))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a carnivore))
(1)
)
(0)
)
}
define rule_7 {
(if (AND
(isThisFactTrue '(the animal is a mammal))
(isThisFactTrue '(the animal has hooves))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is an ungulate))
(1)
)
(0)
)
}
define rule_8 {
(if (AND
(isThisFactTrue '(the animal is a mammal))
(isThisFactTrue '(the animal chews its cud))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is an ungulate))
(addThisFact '(the animal is even-toed))
(1)
)
(0)
)
}
define rule_9 {
(if (AND
(isThisFactTrue '(the animal is a carnivore))
(isThisFactTrue '(the animal has a tawny colour))
(isThisFactTrue '(the animal has dark spots))
(availableRule '\v(macro))
)
(.
(say '(the animal is a cheetah))
(addThisFact '(the animal is a cheetah))
(1)
)
(0)
)
}
define rule_10 {
(if (AND
(isThisFactTrue '(the animal is a carnivore))
(isThisFactTrue '(the animal has a tawny colour))
(isThisFactTrue '(the animal has black stripes))
(availableRule '\v(macro))
)
(.
(say '(the animal is a tiger))
(addThisFact '(the animal is a tiger))
(1)
)
(0)
)
}
define rule_11 {
(if (AND
(isThisFactTrue '(the animal is an ungulate))
(isThisFactTrue '(the animal has long legs))
(isThisFactTrue '(the animal has a long neck))
(availableRule '\v(macro))
)
(.
(say '(the animal is a giraffe))
(addThisFact '(the animal is a giraffe))
(1)
)
(0)
)
}
define rule_12 {
(if (AND
(isThisFactTrue '(the animal is an ungulate))
(isThisFactTrue '(the animal has a white colour))
(isThisFactTrue '(the animal has black stripes))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a zebra))
(1)
)
(0)
)
}
define rule_13 {
(if (AND
(isThisFactTrue '(the animal is a bird))
(isThisFactTrue '(the animal does not fly))
(isThisFactTrue '(the animal has long legs))
(isThisFactTrue '(the animal has a long neck))
(isThisFactTrue '(the animal is black and white))
(availableRule '\v(macro))
)
(.
(addThisFact '())
(1)
)
(0)
)
}
define rule_14 {
(if (AND
(isThisFactTrue '(the animal is a bird))
(isThisFactTrue '(the animal does not fly))
(isThisFactTrue '(the animal swims))
(isThisFactTrue '(the animal is black and white))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is a penguin))
(1)
)
(0)
)
}
define rule_15 {
(if (AND
(isThisFactTrue '(the animal is a bird))
(isThisFactTrue '(the animal is a good flier))
(availableRule '\v(macro))
)
(.
(addThisFact '(the animal is an albatross))
(1)
)
(0)
)
}
echo
clearAllFacts
addGoal never
echo
# The following assumption reveals a giraffe
addThisFact {the animal has hair}
addThisFact {the animal has claws}
addThisFact {the animal has pointed teeth}
addThisFact {the animal's eyes point forward}
addThisFact {the animal has a tawny colour}
addThisFact {the animal has dark spots}
echo
firerule {rule_1 rule_2 rule_3 rule_4 rule_5 rule_6 rule_7 rule_8 -
rule_9 rule_10 rule_11 rule_12 rule_13 rule_14 rule_15}