SlideShare a Scribd company logo
1 of 19
CLIPS Basics
Nauman nay jo commands krwae
(deftemplate sister "bhai sahab" (slot sisterName)))
(assert (sister (sisterName "gul")))
(assert (sister (sisterName "hadia")))
(assert (sister (sisterName "jasmine")))
(defrule A "BHAI SAHIB SUPERVISOR" (sister (sisterName "hadia"))
=>
(printout t "parh lia kro tmahary paper nazdik hy" crlf crlf)
)
now we have to assert a new fact??
(assert (sister (sisterName "gul")))
now we have to run>
(run)
found it
agend perr excute it means k kam khtm hoa
other basic command for vu student
CLIPS> (+ 3 4)
7
CLIPS> (defglobal ?*x* = 3)
CLIPS> ?*x*
3
CLIPS> red
red
CLIPS> (bind ?a 5)
5
CLIPS> (+ ?a 3)
8
CLIPS> (reset)
CLIPS> ?a
[EVALUATN1] Variable a is unbound
FALSE
CLIPS>
CLIPS> (- 12 3 4)
5
CLIPS> (- 12 3.0 5)
4.0
CLIPS> (- 4.7 3.1)
1.6
CLIPS>
CLIPS> (/ 4 2)
2.0
CLIPS> (/ 4.0 2.0)
2.0
CLIPS> (/ 24 3 4)
2.0
CLIPS>
CLIPS> (div 4 2)
2
CLIPS> (div 5 2)
2
CLIPS> (div 33 2 3 5)
1
CLIPS>
CLIPS> (max 3.0 4 2.0)
4
CLIPS>
CLIPS> (min 4 0.1 -2.3)
-2.3
CLIPS>
CLIPS> (abs 4.0)
4.0
CLIPS> (abs -2)
2
CLIPS>
CLIPS> (float 4.0)
4.0
CLIPS> (float -2)
-2.0
CLIPS>
CLIPS> (integer 4.0)
4
CLIPS> (integer -2)
-2
CLIPS>
CLIPS> (cos 0)
1.0
CLIPS> (acos 1.0)
0.0
CLIPS>
CLIPS> (deg-rad 180)
3.141592653589793
CLIPS>
CLIPS> (pi)
3.141592653589793
CLIPS>
CLIPS> (** 3 2)
9.0
CLIPS>
CLIPS> (exp 1)
2.718281828459045
CLIPS>
CLIPS> (log10 100)
2.0
CLIPS>
CLIPS> (mod 5 2)
1
CLIPS> (mod 3.7 1.2)
0.1
CLIPS>
Function calls in CLIPS use a prefix notation – the arguments to a function always appear after
the function name. Function calls begin with a left parenthesis, followed by the name of the
function, then the arguments to the function follow (each argument separated by one or more
spaces). Arguments to a function can be primitive data types, variables, or another function call.
The function call is then closed with a right parenthesis. Some examples of function calls using
the addition (+) and multiplication (*) functions are shown following.
(+ 3 4 5)
(* 5 6.0 2)
(+ 3 (* 8 9) 4)
(* 8 (+ 3 (* 2 3 4) 9) (* 3 4))
Ordered facts consist of a symbol followed by a sequence of zero or more fields separated by
spaces and delimited by an opening parenthesis on the left and a closing parenthesis on the right.
The first field of an ordered fact specifies a “relation” that applied to the remaining fields in the
ordered fact. For example, (father-of jack bill) states that bill is the father of jack.
Some examples of ordered facts are shown following.
(the pump is on)
(altitude is 10000 feet)
(grocery-list bread milk eggs)
Non-ordered(ordeftemplate) factsprovide the userwiththe abilitytoabstractthe structure of a fact
by assigningnamestoeachfieldinthe fact.The deftemplate construct(see section3) isusedtocreate
a template whichcanthenbe usedto access fieldsbyname.The deftemplate constructisanalogousto
a record or structure definitioninprogramminglanguagessuchasPascal and C.
Some examples of deftemplate facts are shown following.
(client (name "Joe Brown") (id X9345A))
(point-mass (x-velocity 100) (y-velocity -200))
(class (teacher "Martha Jones") (#-students 30) (Room "37A"))
(grocery-list (#-of-items 3) (items bread milk eggs))
Deftemplate Construct
The deftemplate constructisanalogoustoarecord or structure definitioninprogramminglanguages
such as Pascal and C.
(deftemplate object
(slot name)
(slot location)
(slot on-top-of)
(slot weight)
(multislot contents))
The gensym* function is similar to the gensym function, however, it will produce a unique
symbol that does not currently exist within the CLIPS environment.
Example
CLIPS> (setgen 1)
1
CLIPS> (assert (gen1 gen2 gen3))
<Fact-0>
CLIPS> (gensym)
gen1
CLIPS> (gensym*)
gen4
CLIPS>
The <default-attribute> specifies the value to be used for unspecified slots of a template fact
when an assert action is performed. One of two types of default selections can be chosen: default
or dynamic-default.
The default attribute specifies a static default value. The specified expressions are evaluated
once when the deftemplate is defined and the result is stored with the deftemplate. The result is
assigned to the appropriate slot when a new template fact is asserted. If the keyword ?DERIVE is
used for the default value, then a default value is derived from the constraints for the slot (see
section 11.5 for more details). By default, the default attribute for a slot is (default ?DERIVE). If
the keyword ?NONE is used for the default value, then a value must explicitly be assigned for a
slot when an assert is performed. It is an error to assert a template fact without specifying the
values for the (default ?NONE) slots.
The default-dynamic attribute is a dynamic default. The specified expressions are evaluated
every time a template fact is asserted, and the result is assigned to the appropriate slot.
A single-field slot may only have a single value for its default. Any number of values may be
specified as the default for a multifield slot (as long as the number of values satisfies the
cardinality attribute for the slot).
Example
CLIPS> (clear)
CLIPS>
(deftemplate foo
(slot w (default ?NONE))
(slot x (default ?DERIVE))
(slot y (default (gensym*)))
(slot z (default-dynamic (gensym*))))
CLIPS> (assert (foo))
[TMPLTRHS1] Slot w requires a value because of its (default ?NONE) attribute.
CLIPS> (assert (foo (w 3)))
<Fact-0>
CLIPS> (assert (foo (w 4)))
<Fact-1>
CLIPS> (facts)
f-0 (foo (w 3) (x nil) (y gen1) (z gen2))
f-1 (foo (w 4) (x nil) (y gen1) (z gen3))
For a total of 2 facts.
CLIPS>
Deffacts
Example
(deffacts startup "Refrigerator Status"
(refrigerator light on)
(refrigerator door open)
(refrigerator temp (get-temp)))
All suchexpressionsare evaluatedwhenCLIPSisreset.
(deffacts data-facts
(data 1.0 blue "red")
(data 1 blue)
(data 1 blue red)
(data 1 blue RED)
(data 1 blue red 6.9))
(deftemplate person
(slot name)
(slot age)
(multislot friends))
(deffacts people
(person (name Joe) (age 20))
(person (name Bob) (age 20))
(person (name Joe) (age 34))
(person (name Sue) (age 34))
(person (name Sue) (age 20)))
Defrule
Example
(defrule example-rule "This is an example of a simple rule"
(refrigerator light on)
(refrigerator door open)
=>
(assert (refrigerator food spoiled)))
CLIPS> (clear)
CLIPS> (defrule find-data (data 1 blue red) =>)
CLIPS> (reset)
CLIPS> (agenda)
0 find-data: f-3
For a total of 1 activation.
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data 1.0 blue "red")
f-2 (data 1 blue)
f-3 (data 1 blue red)
f-4 (data 1 blue RED)
f-5 (data 1 blue red 6.9)
For a total of 6 facts.
CLIPS>
CLIPS> (clear)
CLIPS>
(defrule Find-Bob
(person (name Bob) (age 20))
=>)
CLIPS>
(defrule Find-Sue
(person (age 34) (name Sue))
=>)
CLIPS> (reset)
CLIPS> (agenda)
0 Find-Sue: f-4
0 Find-Bob: f-2
For a total of 2 activations.
CLIPS> (facts)
f-0 (initial-fact)
f-1 (person (name Joe) (age 20) (friends))
f-2 (person (name Bob) (age 20) (friends))
f-3 (person (name Joe) (age 34) (friends))
f-4 (person (name Sue) (age 34) (friends))
f-5 (person (name Sue) (age 20) (friends))
For a total of 6 facts.
CLIPS>
Wildcards
The single-fieldwildcard,denotedbyaquestionmarkcharacter(?),matchesanyvalue storedinexactly
one fieldinthe patternentity.
The multifieldwildcard,denotedbyadollarsignfollowedbyaquestionmark($?),matchesany value in
zero or more fieldsinapatternentity.
Example 1
CLIPS> (clear)
CLIPS> (reset)
CLIPS> (assert (data 2 blue green)
(data 1 blue)
(data 1 blue red))
<Fact-3>
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data 2 blue green)
f-2 (data 1 blue)
f-3 (data 1 blue red)
For a total of 4 facts.
CLIPS>
(defrule find-data-1
(data ?x ?y ?z)
=>
(printout t ?x " : " ?y " : " ?z crlf))
CLIPS> (run)
1 : blue : red
2 : blue : green
CLIPS>
Example 2
CLIPS> (reset)
CLIPS> (assert (data 1 blue)
(data 1 blue red)
(data 1 blue red 6.9))
<Fact-3>
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data 1 blue)
f-2 (data 1 blue red)
f-3 (data 1 blue red 6.9)
For a total of 4 facts.
CLIPS>
(defrule find-data-1
(data ?x $?y ?z)
=>
(printout t "?x = " ?x crlf
"?y = " ?y crlf
"?z = " ?z crlf
"------"crlf))
CLIPS> (run)
?x = 1
?y = (blue red)
?z = 6.9
------
?x = 1
?y = (blue)
?z = red
------
?x = 1
?y = ()
?z = blue
------
CLIPS>
Example 3
CLIPS> (clear)
CLIPS>
(deffacts data
(data red green)
(data purple blue)
(data purple green)
(data red blue green)
(data purple blue green)
(data purple blue brown))
CLIPS>
(defrule find-data-1
(data red ?x)
(data purple ?x)
=>)
CLIPS>
(defrule find-data-2
(data red $?x)
(data purple $?x)
=>)
CLIPS> (reset)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data red green)
f-2 (data purple blue)
f-3 (data purple green)
f-4 (data red blue green)
f-5 (data purple blue green)
f-6 (data purple blue brown)
For a total of 7 facts.
CLIPS> (agenda)
0 find-data-2: f-4,f-5
0 find-data-1: f-1,f-3
0 find-data-2: f-1,f-3
For a total of 3 activations.
CLIPS>
& | ~ (Logical AND,OR, NOT)
Example 1
CLIPS> (clear)
CLIPS> (deftemplate data-B (slot value))
CLIPS>
(deffacts AB
(data-A green)
(data-A blue)
(data-B (value red))
(data-B (value blue)))
CLIPS>
(defrule example1-1
(data-A ~blue)
=>)
CLIPS>
(defrule example1-2
(data-B (value ~red&~green))
=>)
CLIPS>
(defrule example1-3
(data-B (value green|red))
=>)
CLIPS> (reset)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data-A green)
f-2 (data-A blue)
f-3 (data-B (value red))
f-4 (data-B (value blue))
For a total of 5 facts.
CLIPS> (agenda)
0 example1-2: f-4
0 example1-3: f-3
0 example1-1: f-1
For a total of 3 activations.
CLIPS>
Example 2
CLIPS> (clear)
CLIPS> (deftemplate data-B (slot value))
CLIPS>
(deffacts B
(data-B (value red))
(data-B (value blue)))
CLIPS>
(defrule example2-1
(data-B (value ?x&~red&~green))
=>
(printout t "?x in example2-1 = " ?x crlf))
CLIPS>
(defrule example2-2
(data-B (value ?x&green|red))
=>
(printout t "?x in example2-2 = " ?x crlf))
CLIPS> (reset)
CLIPS> (run)
?x in example2-1 = blue
?x in example2-2 = red
CLIPS>
Example 3
CLIPS> (clear)
CLIPS> (deftemplate data-B (slot value))
CLIPS>
(deffacts AB
(data-A green)
(data-A blue)
(data-B (value red))
(data-B (value blue)))
CLIPS>
(defrule example3-1
(data-A ?x&~green)
(data-B (value ?y&~?x))
=>)
CLIPS>
(defrule example3-2
(data-A ?x)
(data-B (value ?x&green|blue))
=>)
CLIPS>
(defrule example3-3
(data-A ?x)
(data-B (value ?y&blue|?x))
=>)
CLIPS> (reset)
CLIPS> (facts)
f-0 (initial-fact)
f-1 (data-A green)
f-2 (data-A blue)
f-3 (data-B (value red))
f-4 (data-B (value blue))
For a total of 5 facts.
CLIPS> (agenda)
0 example3-3: f-1,f-4
0 example3-3: f-2,f-4
0 example3-2: f-2,f-4
0 example3-1: f-2,f-3
For a total of 4 activations.
CLIPS>
If thenelse
(defrule closed-valves
(temp high)
(valve ?v closed)
=>
(if (= ?v 6)
then
(printout t "The special valve " ?v " is closed!" crlf)
(assert (perform special operation))
else
(printout t "Valve " ?v " is normally closed" crlf)))
Alternate,
(defrule closed-valves-number-6
(temp high)
(valve 6 closed)
=>
(printout t "The special valve 6 is closed!" crlf)
(assert (perform special operation)))
(defrule closed-valves-other-than-6
(temp high)
(valve ?v&~6 closed)
=>
(printout t "Valve " ?v " is normally closed" crlf))
(defrule open-valves
(valves-open-through ?v)
=>
(while (> ?v 0)
(printout t "Valve " ?v " is open" crlf)
(bind ?v (- ?v 1))))
CLIPS> (loop-for-count 2 (printout t "Hello world" crlf))
Hello world
Hello world
FALSE
CLIPS>
(loop-for-count (?cnt1 2 4) do
(loop-for-count (?cnt2 1 3) do
(printout t ?cnt1 " " ?cnt2 crlf)))
CLIPS>
(deffunction sign (?num)
(if (> ?num 0) then
(return 1))
(if (< ?num 0) then
(return -1))
0)
CLIPS> (sign 5)
1
CLIPS> (sign -10)
-1
CLIPS> (sign 0)
0
CLIPS>
CLIPS>
(deffunction iterate (?num)
(bind ?i 0)
(while TRUE do
(if (>= ?i ?num) then
(break))
(printout t ?i " ")
(bind ?i (+ ?i 1)))
(printout t crlf))
CLIPS> (iterate 1)
0
CLIPS> (iterate 10)
0 1 2 3 4 5 6 7 8 9
CLIPS>
CLIPS> (defglobal ?*x* = 0)
CLIPS> (defglobal ?*y* = 1)
CLIPS>
(deffunction foo (?val)
(switch ?val
(case ?*x* then *x*)
(case ?*y* then *y*)
(default none)))
CLIPS> (foo 0)
*x*
CLIPS> (foo 1)
*y*
CLIPS> (foo 2)
none
CLIPS>
The numberp functionreturnsthe symbol TRUEif itsargumentisa floator integer,otherwise itreturns
the symbol FALSE.
The floatp functionreturnsthe symbol TRUE if itsargumentisa float,otherwiseitreturnsthe symbol
FALSE.
The integerpfunctionreturnsthe symbol TRUE if itsargumentisan integer,otherwise itreturnsthe
symbol FALSE.
The stringp functionreturnsthe symbol TRUE if itsargumentisa string,otherwise itreturnsthe symbol
FALSE.
The symbolp functionreturnsthe symbol TRUEif itsargumentisa symbol,otherwiseitreturnsthe
symbol FALSE.Thisfunctionmayalsobe calledusingthe name wordp.
The evenpfunctionreturnsthe symbol TRUE if itsargumentisan evennumber,otherwise itreturnsthe
symbol FALSE.
The oddp functionreturnsthe symbol TRUE if itsargumentis an oddnumber,otherwiseitreturnsthe
symbol FALSE.
The multifieldpfunctionreturnsthe symbolTRUEif itsargumentisa multifieldvalue,otherwise it
returnsthe symbol FALSE.Thisfunctionmayalsobe calledusingthe name sequencep.
The pointerp functionreturnsthe symbol TRUEif its argumentisan external-address,otherwise it
returnsthe symbol FALSE.
The eq functionreturnsthe symbol TRUE if itsfirstargumentisequal invalue toall its subsequent
arguments,otherwiseitreturnsthe symbol FALSE.Note that eqcomparestypesaswell asvalues.Thus,
(eq3 3.0) isFALSE since 3 is an integerand3.0 is a float.
The neq function returns the symbol TRUE if its first argument is not equal in value to all its
subsequent arguments, otherwise it returns the symbol FALSE. Note that neq compares types as
well as values. Thus, (neq 3 3.0) is TRUE since 3 is an integer and 3.0 is a float.
The = functionreturnsthe symbol TRUE if itsfirstargumentisequal invalue toall its subsequent
arguments,otherwiseitreturnsthe symbol FALSE.Note that = comparesonlynumericvaluesandwill
convertintegerstofloatswhennecessaryforcomparison.
The <> functionreturnsthe symbol TRUE if itsfirstargumentis notequal invalue toall its subsequent
arguments,otherwiseitreturnsthe symbol FALSE.Note that <> comparesonlynumericvaluesandwill
convertintegerstofloatswhennecessaryforcomparison.
The >= functionreturnsthe symbol TRUE if for all itsarguments,argumentn-1isgreaterthan or equal
to argumentn,otherwise itreturnsthe symbol FALSE.Note that >= comparesonlynumericvaluesand
will convertintegerstofloatswhennecessaryforcomparison.
The < functionreturnsthe symbol TRUE if forall itsarguments,argumentn-1islessthanargumentn,
otherwise itreturnsthe symbol FALSE.Note that < comparesonlynumericvaluesandwillconvert
integerstofloatswhennecessaryforcomparison.
The <= functionreturnsthe symbol TRUE if for all itsarguments,argumentn-1islessthan or equal to
argumentn,otherwise itreturnsthe symbol FALSE.Note that <= comparesonlynumericvaluesandwill
convertintegerstofloatswhennecessaryforcomparison.
Example
CLIPS> (= 3 3.0)
TRUE
CLIPS> (= 4 4.1)
FALSE
CLIPS>
CLIPS> (neq foo bar yak bar)
TRUE
CLIPS> (neq foo foo yak bar)
FALSE
CLIPS> (neq 3 a)
TRUE
CLIPS>
CLIPS> (eq foo bar mumble foo)
FALSE
CLIPS> (eq foo foo foo foo)
TRUE
CLIPS> (eq 3 4)
FALSE
CLIPS>
The and functionreturnsthe symbol TRUEif eachof itsargumentsevaluatestoTRUE, otherwise it
returnsthe symbol FALSE.The and functionperformsshort-circuitedbooleanlogic.Eachargumentof
the functionisevaluatedfrom lefttoright.If anyargumentevaluatestoFALSE,thenthe symbol FALSEis
immediatelyreturnedbythe function.
he or functionreturnsthe symbol TRUEif any of itsargumentsevaluatestoTRUE, otherwise itreturns
the symbol FALSE.The or functionperformsshort-circuitedbooleanlogic.Eachargumentof the function
isevaluatedfromlefttoright.If any argumentevaluatestoTRUE,thenthe symbol TRUE isimmediately
returnedbythe function.
The not functionreturnsthe symbol TRUEif its argumentevaluatestoFALSE, otherwiseitreturnsthe
symbol FALSE.
create$ functionappendsanynumberof fieldstogethertocreate a multifieldvalue.
CLIPS> (create$ hammer drill saw screw pliers wrench)
(hammer drill saw screw pliers wrench)
CLIPS> (create$ (+ 3 4) (* 2 3) (/ 8 4))
(7 6 2)
CLIPS>
The nth$ functionwill returnaspecifiedfieldfromamultifieldvalue.
The member$ functionwill tellif asingle fieldvalueiscontainedinamultifieldvalue.
CLIPS> (member$ blue (create$ red 3 "text" 8.7 blue))
5
CLIPS> (member$ 4 (create$ red 3 "text" 8.7 blue))
FALSE
CLIPS> (member$ (create$ b c) (create$ a b c d))
(2 3)
CLIPS>
The str-cat functionwill concatenatesitsargumentsintoasingle string.
The sym-cat functionwill concatenate itsargumentsintoasingle symbol.Itisfunctionallyidentical to
the str-cat functionwiththe exceptionthatthe returnedvalue isa symbol andnota string.
The sub-stringfunctionwill retrieve aportionof a stringfromanotherstring.
The str-indexfunctionwill returnthe positionof astringinside anotherstring.
CLIPS> (str-index "def" "abcdefghi")
4
CLIPS> (str-index "qwerty" "qwertypoiuyt")
1
CLIPS> (str-index "qwerty" "poiuytqwer")
FALSE
CLIPS>
The eval functionevaluatesthe stringasthoughitwere enteredatthe commandprompt.
Example
CLIPS> (eval "(+ 3 4)")
7
CLIPS> (eval "(create$ a b c)")
(a b c)
CLIPS>
Files
he open function allows a user to open a file from the RHS of a rule and attaches a logical name
to it. This function takes three arguments: (1) the name of the file to be opened; (2) the logical
name which will be used by other CLIPS I/O functions to access the file; and (3) an optional
mode specifier. The mode specifier must be one of the following strings:
Mode Means
"r" read access only
"w" write access only
"r+" read and write access
"a" append access only
"wb" binary write access
Example
CLIPS> (open "myfile.clp" writeFile "w")
TRUE
CLIPS> (open "MS-DOSdirectoryfile.clp" readFile)
TRUE
CLIPS>
The close functionclosesafile streampreviouslyopenedwiththe opencommand.The file isspecified
by a logical name previouslyattachedtothe desiredstream.
Example
CLIPS> (open "myfile.clp" writeFile "w")
TRUE
CLIPS> (open "MS-DOSdirectoryfile.clp" readFile)
TRUE
CLIPS> (close writeFile)
TRUE
CLIPS> (close writeFile)
FALSE
CLIPS> (close)
TRUE
CLIPS> (close)
FALSE
CLIPS>
The function printoutallowsoutputtoa device attachedtoa logical name.The logical name mustbe
specifiedandthe device musthave beenpreparedpreviouslyforoutput(e.g.,afile mustbe opened
first).Tosendoutputto stdout, use a t forthe logical name.If the logical name nil isused,the printout
functiondoesnothing.
Example
CLIPS> (printout t "Hello there!" crlf)
Hello There!
CLIPS> (open "data.txt" mydata "w")
TRUE
CLIPS> (printout mydata "red green")
CLIPS> (close)
TRUE
The read functionallowsausertoinputinformationforasingle field.All of the standardfieldrules(e.g.,
multiple symbolsmustbe embeddedwithinquotes) apply.
CLIPS> (open "data.txt" mydata "w")
TRUE
CLIPS> (printout mydata "red green")
CLIPS> (close)
TRUE
CLIPS> (open "data.txt" mydata)
TRUE
CLIPS> (read mydata)
red
CLIPS> (read mydata)
green
CLIPS> (read mydata)
EOF
CLIPS> (close)
TRUE
CLIPS>
The readline functionissimilartothe read function,butitallowsawhole stringtobe inputinsteadof a
single field.Normally, readwill stopwhenitencountersadelimiter.The readline functiononlystops
whenitencountersacarriage return,a semicolon,oranEOF. Anytabsor spacesinthe inputare
returnedby readline asa part of the string.The readline functionreturnsastring.
Example
CLIPS> (open "data.txt" mydata "w")
TRUE
CLIPS> (printout mydata "red green")
CLIPS> (close)
TRUE
CLIPS> (open "data.txt" mydata)
TRUE
CLIPS> (readline mydata)
"red green"
CLIPS> (readline mydata)
EOF
CLIPS> (close)
TRUE
CLIPS>
The get-char functionallowsasingle charactertobe retrievedfromalogical name.
Example
CLIPS> (open example.txt example "w")
TRUE
CLIPS> (printout example "ABC" crlf)
CLIPS> (close example)
TRUE
CLIPS> (open example.txt example)
TRUE
CLIPS> (get-char example)
65
CLIPS> (format nil "%c" (get-char example))
"B"
CLIPS> (get-char example)
67
CLIPS> (get-char example)
10
CLIPS> (get-char example)
-1
CLIPS>
(progn (printout t "Press any character to continue...")
(get-char t))
Press any character to continue...
13
CLIPS>
The read-numberfunctionallowsauserto inputa single numberusingthe localizedformat(if one has
beenspecifiedusingthe set-locale function).If alocalizedformathasnotbeenspecified,thenthe C
formatfor a numberisused.
Example
CLIPS> (read-number)
34
34
CLIPS> (read-number)
34.0
34.0
CLIPS> (read-number)
23,0
"*** READ ERROR ***"
CLIPS>

More Related Content

What's hot

Solving recurrences
Solving recurrencesSolving recurrences
Solving recurrencesMegha V
 
4 informed-search
4 informed-search4 informed-search
4 informed-searchMhd Sb
 
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...Philip Schwarz
 
AI 2 | Rational Agents and Problem Formulation
AI 2 | Rational Agents and Problem FormulationAI 2 | Rational Agents and Problem Formulation
AI 2 | Rational Agents and Problem FormulationMohammad Imam Hossain
 
Types of environment
Types of environmentTypes of environment
Types of environmentMegha Sharma
 
Functional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and ScalaFunctional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and ScalaPhilip Schwarz
 
Introduction to oop and java fundamentals
Introduction to oop and java fundamentalsIntroduction to oop and java fundamentals
Introduction to oop and java fundamentalsAnsgarMary
 
Asymptotic Notation and Data Structures
Asymptotic Notation and Data StructuresAsymptotic Notation and Data Structures
Asymptotic Notation and Data StructuresAmrinder Arora
 
Algorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsAlgorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsMohamed Loey
 
Job sequencing with deadlines(with example)
Job sequencing with deadlines(with example)Job sequencing with deadlines(with example)
Job sequencing with deadlines(with example)Vrinda Sheela
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadOliver Daff
 
Algorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAlgorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAdelina Ahadova
 
Randomizing quicksort algorith with example
Randomizing quicksort algorith with exampleRandomizing quicksort algorith with example
Randomizing quicksort algorith with examplemaamir farooq
 
Infix to Prefix (Conversion, Evaluation, Code)
Infix to Prefix (Conversion, Evaluation, Code)Infix to Prefix (Conversion, Evaluation, Code)
Infix to Prefix (Conversion, Evaluation, Code)Ahmed Khateeb
 
Basic Sorting algorithms csharp
Basic Sorting algorithms csharpBasic Sorting algorithms csharp
Basic Sorting algorithms csharpMicheal Ogundero
 

What's hot (20)

Time complexity.ppt
Time complexity.pptTime complexity.ppt
Time complexity.ppt
 
Solving recurrences
Solving recurrencesSolving recurrences
Solving recurrences
 
4 informed-search
4 informed-search4 informed-search
4 informed-search
 
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...
Folding Unfolded - Polyglot FP for Fun and Profit - Haskell and Scala Part 2 ...
 
AI 2 | Rational Agents and Problem Formulation
AI 2 | Rational Agents and Problem FormulationAI 2 | Rational Agents and Problem Formulation
AI 2 | Rational Agents and Problem Formulation
 
Types of environment
Types of environmentTypes of environment
Types of environment
 
Functional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and ScalaFunctional Core and Imperative Shell - Game of Life Example - Haskell and Scala
Functional Core and Imperative Shell - Game of Life Example - Haskell and Scala
 
chapter 1
chapter 1chapter 1
chapter 1
 
Introduction to oop and java fundamentals
Introduction to oop and java fundamentalsIntroduction to oop and java fundamentals
Introduction to oop and java fundamentals
 
AI 4 | Informed Search
AI 4 | Informed SearchAI 4 | Informed Search
AI 4 | Informed Search
 
Asymptotic Notation and Data Structures
Asymptotic Notation and Data StructuresAsymptotic Notation and Data Structures
Asymptotic Notation and Data Structures
 
Algorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph AlgorithmsAlgorithms Lecture 7: Graph Algorithms
Algorithms Lecture 7: Graph Algorithms
 
Job sequencing with deadlines(with example)
Job sequencing with deadlines(with example)Job sequencing with deadlines(with example)
Job sequencing with deadlines(with example)
 
Functor, Apply, Applicative And Monad
Functor, Apply, Applicative And MonadFunctor, Apply, Applicative And Monad
Functor, Apply, Applicative And Monad
 
Algorithm Complexity and Main Concepts
Algorithm Complexity and Main ConceptsAlgorithm Complexity and Main Concepts
Algorithm Complexity and Main Concepts
 
Randomizing quicksort algorith with example
Randomizing quicksort algorith with exampleRandomizing quicksort algorith with example
Randomizing quicksort algorith with example
 
Infix to Prefix (Conversion, Evaluation, Code)
Infix to Prefix (Conversion, Evaluation, Code)Infix to Prefix (Conversion, Evaluation, Code)
Infix to Prefix (Conversion, Evaluation, Code)
 
Activity diagram
Activity diagramActivity diagram
Activity diagram
 
Basic Sorting algorithms csharp
Basic Sorting algorithms csharpBasic Sorting algorithms csharp
Basic Sorting algorithms csharp
 
AI 3 | Uninformed Search
AI 3 | Uninformed SearchAI 3 | Uninformed Search
AI 3 | Uninformed Search
 

Similar to Clips basics how to make expert system in clips | facts adding | rules making | Rules firing | inference | cs607

Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lispkyleburton
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Introthnetos
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Leonardo Borges
 
The Magnificent Seven
The Magnificent SevenThe Magnificent Seven
The Magnificent SevenMike Fogus
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - StockholmJan Kronquist
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Baruch Sadogursky
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Sciencehenrygarner
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingMuthu Vinayagam
 
Basic R Data Manipulation
Basic R Data ManipulationBasic R Data Manipulation
Basic R Data ManipulationChu An
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2Hang Zhao
 
ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions Dr. Volkan OBAN
 
Microsoft Word Practice Exercise Set 2
Microsoft Word   Practice Exercise Set 2Microsoft Word   Practice Exercise Set 2
Microsoft Word Practice Exercise Set 2rampan
 
The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)GroovyPuzzlers
 
R Programming: Comparing Objects In R
R Programming: Comparing Objects In RR Programming: Comparing Objects In R
R Programming: Comparing Objects In RRsquared Academy
 
Modern technologies in data science
Modern technologies in data science Modern technologies in data science
Modern technologies in data science Chucheng Hsieh
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Contextlichtkind
 

Similar to Clips basics how to make expert system in clips | facts adding | rules making | Rules firing | inference | cs607 (20)

Introduction To Lisp
Introduction To LispIntroduction To Lisp
Introduction To Lisp
 
CQL 实现
CQL 实现CQL 实现
CQL 实现
 
Clojure Intro
Clojure IntroClojure Intro
Clojure Intro
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015
 
The Magnificent Seven
The Magnificent SevenThe Magnificent Seven
The Magnificent Seven
 
Clojure for Java developers - Stockholm
Clojure for Java developers - StockholmClojure for Java developers - Stockholm
Clojure for Java developers - Stockholm
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
GE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python ProgrammingGE8151 Problem Solving and Python Programming
GE8151 Problem Solving and Python Programming
 
Basic R Data Manipulation
Basic R Data ManipulationBasic R Data Manipulation
Basic R Data Manipulation
 
Fp in scala part 2
Fp in scala part 2Fp in scala part 2
Fp in scala part 2
 
Rsplit apply combine
Rsplit apply combineRsplit apply combine
Rsplit apply combine
 
Basics
BasicsBasics
Basics
 
ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions ggtimeseries-->ggplot2 extensions
ggtimeseries-->ggplot2 extensions
 
Microsoft Word Practice Exercise Set 2
Microsoft Word   Practice Exercise Set 2Microsoft Word   Practice Exercise Set 2
Microsoft Word Practice Exercise Set 2
 
The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)
 
R Programming: Comparing Objects In R
R Programming: Comparing Objects In RR Programming: Comparing Objects In R
R Programming: Comparing Objects In R
 
Modern technologies in data science
Modern technologies in data science Modern technologies in data science
Modern technologies in data science
 
Perl 6 in Context
Perl 6 in ContextPerl 6 in Context
Perl 6 in Context
 

More from NaumanMalik30

How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...
How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...
How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...NaumanMalik30
 
Assignment 4 word press digi skill
Assignment 4 word press digi skillAssignment 4 word press digi skill
Assignment 4 word press digi skillNaumanMalik30
 
Assignment 2 word press digi skill
Assignment 2 word press digi skillAssignment 2 word press digi skill
Assignment 2 word press digi skillNaumanMalik30
 
Assignmet 4 | Batch Two_FRL101_4
Assignmet 4 | Batch Two_FRL101_4Assignmet 4 | Batch Two_FRL101_4
Assignmet 4 | Batch Two_FRL101_4NaumanMalik30
 
Assignment 3 | Batch Two_FRL101_3
Assignment 3 | Batch Two_FRL101_3Assignment 3 | Batch Two_FRL101_3
Assignment 3 | Batch Two_FRL101_3NaumanMalik30
 
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papers
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papersIcs chapter wise notes | ics papers | ICS test | ICS book | ics | test papers
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papersNaumanMalik30
 

More from NaumanMalik30 (7)

How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...
How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...
How to choose thesis topic | Bed | Med Thesis description | Guidelines | AIOU...
 
Assignment 4 word press digi skill
Assignment 4 word press digi skillAssignment 4 word press digi skill
Assignment 4 word press digi skill
 
Assignment 2 word press digi skill
Assignment 2 word press digi skillAssignment 2 word press digi skill
Assignment 2 word press digi skill
 
Assignmet 4 | Batch Two_FRL101_4
Assignmet 4 | Batch Two_FRL101_4Assignmet 4 | Batch Two_FRL101_4
Assignmet 4 | Batch Two_FRL101_4
 
Batch Two_FRL101_1
Batch Two_FRL101_1Batch Two_FRL101_1
Batch Two_FRL101_1
 
Assignment 3 | Batch Two_FRL101_3
Assignment 3 | Batch Two_FRL101_3Assignment 3 | Batch Two_FRL101_3
Assignment 3 | Batch Two_FRL101_3
 
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papers
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papersIcs chapter wise notes | ics papers | ICS test | ICS book | ics | test papers
Ics chapter wise notes | ics papers | ICS test | ICS book | ics | test papers
 

Recently uploaded

Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationnomboosow
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)eniolaolutunde
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityGeoBlogs
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingTechSoup
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991RKavithamani
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Celine George
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptxVS Mahajan Coaching Centre
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxRoyAbrique
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docxPoojaSen20
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdfQucHHunhnh
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionSafetyChain Software
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesFatimaKhan178732
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...Marc Dusseiller Dusjagr
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfchloefrazer622
 

Recently uploaded (20)

Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
Interactive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communicationInteractive Powerpoint_How to Master effective communication
Interactive Powerpoint_How to Master effective communication
 
Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)Software Engineering Methodologies (overview)
Software Engineering Methodologies (overview)
 
Paris 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activityParis 2024 Olympic Geographies - an activity
Paris 2024 Olympic Geographies - an activity
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Grant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy ConsultingGrant Readiness 101 TechSoup and Remy Consulting
Grant Readiness 101 TechSoup and Remy Consulting
 
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
Industrial Policy - 1948, 1956, 1973, 1977, 1980, 1991
 
Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
Staff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSDStaff of Color (SOC) Retention Efforts DDSD
Staff of Color (SOC) Retention Efforts DDSD
 
Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17Advanced Views - Calendar View in Odoo 17
Advanced Views - Calendar View in Odoo 17
 
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions  for the students and aspirants of Chemistry12th.pptxOrganic Name Reactions  for the students and aspirants of Chemistry12th.pptx
Organic Name Reactions for the students and aspirants of Chemistry12th.pptx
 
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptxContemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
Contemporary philippine arts from the regions_PPT_Module_12 [Autosaved] (1).pptx
 
mini mental status format.docx
mini    mental       status     format.docxmini    mental       status     format.docx
mini mental status format.docx
 
1029-Danh muc Sach Giao Khoa khoi 6.pdf
1029-Danh muc Sach Giao Khoa khoi  6.pdf1029-Danh muc Sach Giao Khoa khoi  6.pdf
1029-Danh muc Sach Giao Khoa khoi 6.pdf
 
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptxINDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
INDIA QUIZ 2024 RLAC DELHI UNIVERSITY.pptx
 
Mastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory InspectionMastering the Unannounced Regulatory Inspection
Mastering the Unannounced Regulatory Inspection
 
Separation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and ActinidesSeparation of Lanthanides/ Lanthanides and Actinides
Separation of Lanthanides/ Lanthanides and Actinides
 
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
“Oh GOSH! Reflecting on Hackteria's Collaborative Practices in a Global Do-It...
 
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
Mattingly "AI & Prompt Design: Structured Data, Assistants, & RAG"
 
Arihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdfArihant handbook biology for class 11 .pdf
Arihant handbook biology for class 11 .pdf
 

Clips basics how to make expert system in clips | facts adding | rules making | Rules firing | inference | cs607

  • 1. CLIPS Basics Nauman nay jo commands krwae (deftemplate sister "bhai sahab" (slot sisterName))) (assert (sister (sisterName "gul"))) (assert (sister (sisterName "hadia"))) (assert (sister (sisterName "jasmine"))) (defrule A "BHAI SAHIB SUPERVISOR" (sister (sisterName "hadia")) => (printout t "parh lia kro tmahary paper nazdik hy" crlf crlf) ) now we have to assert a new fact?? (assert (sister (sisterName "gul"))) now we have to run> (run) found it agend perr excute it means k kam khtm hoa other basic command for vu student CLIPS> (+ 3 4) 7 CLIPS> (defglobal ?*x* = 3) CLIPS> ?*x* 3 CLIPS> red red CLIPS> (bind ?a 5) 5 CLIPS> (+ ?a 3) 8 CLIPS> (reset) CLIPS> ?a [EVALUATN1] Variable a is unbound FALSE CLIPS> CLIPS> (- 12 3 4) 5 CLIPS> (- 12 3.0 5) 4.0 CLIPS> (- 4.7 3.1) 1.6
  • 2. CLIPS> CLIPS> (/ 4 2) 2.0 CLIPS> (/ 4.0 2.0) 2.0 CLIPS> (/ 24 3 4) 2.0 CLIPS> CLIPS> (div 4 2) 2 CLIPS> (div 5 2) 2 CLIPS> (div 33 2 3 5) 1 CLIPS> CLIPS> (max 3.0 4 2.0) 4 CLIPS> CLIPS> (min 4 0.1 -2.3) -2.3 CLIPS> CLIPS> (abs 4.0) 4.0 CLIPS> (abs -2) 2 CLIPS> CLIPS> (float 4.0) 4.0 CLIPS> (float -2) -2.0 CLIPS> CLIPS> (integer 4.0) 4 CLIPS> (integer -2) -2 CLIPS> CLIPS> (cos 0) 1.0 CLIPS> (acos 1.0) 0.0 CLIPS> CLIPS> (deg-rad 180) 3.141592653589793 CLIPS> CLIPS> (pi) 3.141592653589793
  • 3. CLIPS> CLIPS> (** 3 2) 9.0 CLIPS> CLIPS> (exp 1) 2.718281828459045 CLIPS> CLIPS> (log10 100) 2.0 CLIPS> CLIPS> (mod 5 2) 1 CLIPS> (mod 3.7 1.2) 0.1 CLIPS> Function calls in CLIPS use a prefix notation – the arguments to a function always appear after the function name. Function calls begin with a left parenthesis, followed by the name of the function, then the arguments to the function follow (each argument separated by one or more spaces). Arguments to a function can be primitive data types, variables, or another function call. The function call is then closed with a right parenthesis. Some examples of function calls using the addition (+) and multiplication (*) functions are shown following. (+ 3 4 5) (* 5 6.0 2) (+ 3 (* 8 9) 4) (* 8 (+ 3 (* 2 3 4) 9) (* 3 4)) Ordered facts consist of a symbol followed by a sequence of zero or more fields separated by spaces and delimited by an opening parenthesis on the left and a closing parenthesis on the right. The first field of an ordered fact specifies a “relation” that applied to the remaining fields in the ordered fact. For example, (father-of jack bill) states that bill is the father of jack. Some examples of ordered facts are shown following. (the pump is on) (altitude is 10000 feet) (grocery-list bread milk eggs) Non-ordered(ordeftemplate) factsprovide the userwiththe abilitytoabstractthe structure of a fact by assigningnamestoeachfieldinthe fact.The deftemplate construct(see section3) isusedtocreate a template whichcanthenbe usedto access fieldsbyname.The deftemplate constructisanalogousto a record or structure definitioninprogramminglanguagessuchasPascal and C.
  • 4. Some examples of deftemplate facts are shown following. (client (name "Joe Brown") (id X9345A)) (point-mass (x-velocity 100) (y-velocity -200)) (class (teacher "Martha Jones") (#-students 30) (Room "37A")) (grocery-list (#-of-items 3) (items bread milk eggs)) Deftemplate Construct The deftemplate constructisanalogoustoarecord or structure definitioninprogramminglanguages such as Pascal and C. (deftemplate object (slot name) (slot location) (slot on-top-of) (slot weight) (multislot contents)) The gensym* function is similar to the gensym function, however, it will produce a unique symbol that does not currently exist within the CLIPS environment. Example CLIPS> (setgen 1) 1 CLIPS> (assert (gen1 gen2 gen3)) <Fact-0> CLIPS> (gensym) gen1 CLIPS> (gensym*) gen4 CLIPS> The <default-attribute> specifies the value to be used for unspecified slots of a template fact when an assert action is performed. One of two types of default selections can be chosen: default or dynamic-default. The default attribute specifies a static default value. The specified expressions are evaluated once when the deftemplate is defined and the result is stored with the deftemplate. The result is assigned to the appropriate slot when a new template fact is asserted. If the keyword ?DERIVE is used for the default value, then a default value is derived from the constraints for the slot (see section 11.5 for more details). By default, the default attribute for a slot is (default ?DERIVE). If the keyword ?NONE is used for the default value, then a value must explicitly be assigned for a slot when an assert is performed. It is an error to assert a template fact without specifying the values for the (default ?NONE) slots.
  • 5. The default-dynamic attribute is a dynamic default. The specified expressions are evaluated every time a template fact is asserted, and the result is assigned to the appropriate slot. A single-field slot may only have a single value for its default. Any number of values may be specified as the default for a multifield slot (as long as the number of values satisfies the cardinality attribute for the slot). Example CLIPS> (clear) CLIPS> (deftemplate foo (slot w (default ?NONE)) (slot x (default ?DERIVE)) (slot y (default (gensym*))) (slot z (default-dynamic (gensym*)))) CLIPS> (assert (foo)) [TMPLTRHS1] Slot w requires a value because of its (default ?NONE) attribute. CLIPS> (assert (foo (w 3))) <Fact-0> CLIPS> (assert (foo (w 4))) <Fact-1> CLIPS> (facts) f-0 (foo (w 3) (x nil) (y gen1) (z gen2)) f-1 (foo (w 4) (x nil) (y gen1) (z gen3)) For a total of 2 facts. CLIPS> Deffacts Example (deffacts startup "Refrigerator Status" (refrigerator light on) (refrigerator door open) (refrigerator temp (get-temp))) All suchexpressionsare evaluatedwhenCLIPSisreset. (deffacts data-facts (data 1.0 blue "red") (data 1 blue) (data 1 blue red) (data 1 blue RED)
  • 6. (data 1 blue red 6.9)) (deftemplate person (slot name) (slot age) (multislot friends)) (deffacts people (person (name Joe) (age 20)) (person (name Bob) (age 20)) (person (name Joe) (age 34)) (person (name Sue) (age 34)) (person (name Sue) (age 20))) Defrule Example (defrule example-rule "This is an example of a simple rule" (refrigerator light on) (refrigerator door open) => (assert (refrigerator food spoiled))) CLIPS> (clear) CLIPS> (defrule find-data (data 1 blue red) =>) CLIPS> (reset) CLIPS> (agenda) 0 find-data: f-3 For a total of 1 activation. CLIPS> (facts) f-0 (initial-fact) f-1 (data 1.0 blue "red") f-2 (data 1 blue) f-3 (data 1 blue red) f-4 (data 1 blue RED) f-5 (data 1 blue red 6.9) For a total of 6 facts. CLIPS> CLIPS> (clear) CLIPS> (defrule Find-Bob (person (name Bob) (age 20)) =>)
  • 7. CLIPS> (defrule Find-Sue (person (age 34) (name Sue)) =>) CLIPS> (reset) CLIPS> (agenda) 0 Find-Sue: f-4 0 Find-Bob: f-2 For a total of 2 activations. CLIPS> (facts) f-0 (initial-fact) f-1 (person (name Joe) (age 20) (friends)) f-2 (person (name Bob) (age 20) (friends)) f-3 (person (name Joe) (age 34) (friends)) f-4 (person (name Sue) (age 34) (friends)) f-5 (person (name Sue) (age 20) (friends)) For a total of 6 facts. CLIPS> Wildcards The single-fieldwildcard,denotedbyaquestionmarkcharacter(?),matchesanyvalue storedinexactly one fieldinthe patternentity. The multifieldwildcard,denotedbyadollarsignfollowedbyaquestionmark($?),matchesany value in zero or more fieldsinapatternentity. Example 1 CLIPS> (clear) CLIPS> (reset) CLIPS> (assert (data 2 blue green) (data 1 blue) (data 1 blue red)) <Fact-3> CLIPS> (facts) f-0 (initial-fact) f-1 (data 2 blue green) f-2 (data 1 blue) f-3 (data 1 blue red) For a total of 4 facts. CLIPS> (defrule find-data-1 (data ?x ?y ?z) => (printout t ?x " : " ?y " : " ?z crlf)) CLIPS> (run)
  • 8. 1 : blue : red 2 : blue : green CLIPS> Example 2 CLIPS> (reset) CLIPS> (assert (data 1 blue) (data 1 blue red) (data 1 blue red 6.9)) <Fact-3> CLIPS> (facts) f-0 (initial-fact) f-1 (data 1 blue) f-2 (data 1 blue red) f-3 (data 1 blue red 6.9) For a total of 4 facts. CLIPS> (defrule find-data-1 (data ?x $?y ?z) => (printout t "?x = " ?x crlf "?y = " ?y crlf "?z = " ?z crlf "------"crlf)) CLIPS> (run) ?x = 1 ?y = (blue red) ?z = 6.9 ------ ?x = 1 ?y = (blue) ?z = red ------ ?x = 1 ?y = () ?z = blue ------ CLIPS> Example 3 CLIPS> (clear) CLIPS> (deffacts data (data red green) (data purple blue) (data purple green) (data red blue green)
  • 9. (data purple blue green) (data purple blue brown)) CLIPS> (defrule find-data-1 (data red ?x) (data purple ?x) =>) CLIPS> (defrule find-data-2 (data red $?x) (data purple $?x) =>) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (data red green) f-2 (data purple blue) f-3 (data purple green) f-4 (data red blue green) f-5 (data purple blue green) f-6 (data purple blue brown) For a total of 7 facts. CLIPS> (agenda) 0 find-data-2: f-4,f-5 0 find-data-1: f-1,f-3 0 find-data-2: f-1,f-3 For a total of 3 activations. CLIPS> & | ~ (Logical AND,OR, NOT) Example 1 CLIPS> (clear) CLIPS> (deftemplate data-B (slot value)) CLIPS> (deffacts AB (data-A green) (data-A blue) (data-B (value red)) (data-B (value blue))) CLIPS> (defrule example1-1 (data-A ~blue) =>) CLIPS> (defrule example1-2
  • 10. (data-B (value ~red&~green)) =>) CLIPS> (defrule example1-3 (data-B (value green|red)) =>) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (data-A green) f-2 (data-A blue) f-3 (data-B (value red)) f-4 (data-B (value blue)) For a total of 5 facts. CLIPS> (agenda) 0 example1-2: f-4 0 example1-3: f-3 0 example1-1: f-1 For a total of 3 activations. CLIPS> Example 2 CLIPS> (clear) CLIPS> (deftemplate data-B (slot value)) CLIPS> (deffacts B (data-B (value red)) (data-B (value blue))) CLIPS> (defrule example2-1 (data-B (value ?x&~red&~green)) => (printout t "?x in example2-1 = " ?x crlf)) CLIPS> (defrule example2-2 (data-B (value ?x&green|red)) => (printout t "?x in example2-2 = " ?x crlf)) CLIPS> (reset) CLIPS> (run) ?x in example2-1 = blue ?x in example2-2 = red CLIPS> Example 3 CLIPS> (clear) CLIPS> (deftemplate data-B (slot value)) CLIPS>
  • 11. (deffacts AB (data-A green) (data-A blue) (data-B (value red)) (data-B (value blue))) CLIPS> (defrule example3-1 (data-A ?x&~green) (data-B (value ?y&~?x)) =>) CLIPS> (defrule example3-2 (data-A ?x) (data-B (value ?x&green|blue)) =>) CLIPS> (defrule example3-3 (data-A ?x) (data-B (value ?y&blue|?x)) =>) CLIPS> (reset) CLIPS> (facts) f-0 (initial-fact) f-1 (data-A green) f-2 (data-A blue) f-3 (data-B (value red)) f-4 (data-B (value blue)) For a total of 5 facts. CLIPS> (agenda) 0 example3-3: f-1,f-4 0 example3-3: f-2,f-4 0 example3-2: f-2,f-4 0 example3-1: f-2,f-3 For a total of 4 activations. CLIPS> If thenelse (defrule closed-valves (temp high) (valve ?v closed) => (if (= ?v 6) then (printout t "The special valve " ?v " is closed!" crlf)
  • 12. (assert (perform special operation)) else (printout t "Valve " ?v " is normally closed" crlf))) Alternate, (defrule closed-valves-number-6 (temp high) (valve 6 closed) => (printout t "The special valve 6 is closed!" crlf) (assert (perform special operation))) (defrule closed-valves-other-than-6 (temp high) (valve ?v&~6 closed) => (printout t "Valve " ?v " is normally closed" crlf)) (defrule open-valves (valves-open-through ?v) => (while (> ?v 0) (printout t "Valve " ?v " is open" crlf) (bind ?v (- ?v 1)))) CLIPS> (loop-for-count 2 (printout t "Hello world" crlf)) Hello world Hello world FALSE CLIPS> (loop-for-count (?cnt1 2 4) do (loop-for-count (?cnt2 1 3) do (printout t ?cnt1 " " ?cnt2 crlf))) CLIPS> (deffunction sign (?num) (if (> ?num 0) then (return 1)) (if (< ?num 0) then (return -1)) 0)
  • 13. CLIPS> (sign 5) 1 CLIPS> (sign -10) -1 CLIPS> (sign 0) 0 CLIPS> CLIPS> (deffunction iterate (?num) (bind ?i 0) (while TRUE do (if (>= ?i ?num) then (break)) (printout t ?i " ") (bind ?i (+ ?i 1))) (printout t crlf)) CLIPS> (iterate 1) 0 CLIPS> (iterate 10) 0 1 2 3 4 5 6 7 8 9 CLIPS> CLIPS> (defglobal ?*x* = 0) CLIPS> (defglobal ?*y* = 1) CLIPS> (deffunction foo (?val) (switch ?val (case ?*x* then *x*) (case ?*y* then *y*) (default none))) CLIPS> (foo 0) *x* CLIPS> (foo 1) *y* CLIPS> (foo 2) none CLIPS> The numberp functionreturnsthe symbol TRUEif itsargumentisa floator integer,otherwise itreturns the symbol FALSE. The floatp functionreturnsthe symbol TRUE if itsargumentisa float,otherwiseitreturnsthe symbol FALSE.
  • 14. The integerpfunctionreturnsthe symbol TRUE if itsargumentisan integer,otherwise itreturnsthe symbol FALSE. The stringp functionreturnsthe symbol TRUE if itsargumentisa string,otherwise itreturnsthe symbol FALSE. The symbolp functionreturnsthe symbol TRUEif itsargumentisa symbol,otherwiseitreturnsthe symbol FALSE.Thisfunctionmayalsobe calledusingthe name wordp. The evenpfunctionreturnsthe symbol TRUE if itsargumentisan evennumber,otherwise itreturnsthe symbol FALSE. The oddp functionreturnsthe symbol TRUE if itsargumentis an oddnumber,otherwiseitreturnsthe symbol FALSE. The multifieldpfunctionreturnsthe symbolTRUEif itsargumentisa multifieldvalue,otherwise it returnsthe symbol FALSE.Thisfunctionmayalsobe calledusingthe name sequencep. The pointerp functionreturnsthe symbol TRUEif its argumentisan external-address,otherwise it returnsthe symbol FALSE. The eq functionreturnsthe symbol TRUE if itsfirstargumentisequal invalue toall its subsequent arguments,otherwiseitreturnsthe symbol FALSE.Note that eqcomparestypesaswell asvalues.Thus, (eq3 3.0) isFALSE since 3 is an integerand3.0 is a float. The neq function returns the symbol TRUE if its first argument is not equal in value to all its subsequent arguments, otherwise it returns the symbol FALSE. Note that neq compares types as well as values. Thus, (neq 3 3.0) is TRUE since 3 is an integer and 3.0 is a float. The = functionreturnsthe symbol TRUE if itsfirstargumentisequal invalue toall its subsequent arguments,otherwiseitreturnsthe symbol FALSE.Note that = comparesonlynumericvaluesandwill convertintegerstofloatswhennecessaryforcomparison. The <> functionreturnsthe symbol TRUE if itsfirstargumentis notequal invalue toall its subsequent arguments,otherwiseitreturnsthe symbol FALSE.Note that <> comparesonlynumericvaluesandwill convertintegerstofloatswhennecessaryforcomparison. The >= functionreturnsthe symbol TRUE if for all itsarguments,argumentn-1isgreaterthan or equal to argumentn,otherwise itreturnsthe symbol FALSE.Note that >= comparesonlynumericvaluesand will convertintegerstofloatswhennecessaryforcomparison. The < functionreturnsthe symbol TRUE if forall itsarguments,argumentn-1islessthanargumentn, otherwise itreturnsthe symbol FALSE.Note that < comparesonlynumericvaluesandwillconvert integerstofloatswhennecessaryforcomparison.
  • 15. The <= functionreturnsthe symbol TRUE if for all itsarguments,argumentn-1islessthan or equal to argumentn,otherwise itreturnsthe symbol FALSE.Note that <= comparesonlynumericvaluesandwill convertintegerstofloatswhennecessaryforcomparison. Example CLIPS> (= 3 3.0) TRUE CLIPS> (= 4 4.1) FALSE CLIPS> CLIPS> (neq foo bar yak bar) TRUE CLIPS> (neq foo foo yak bar) FALSE CLIPS> (neq 3 a) TRUE CLIPS> CLIPS> (eq foo bar mumble foo) FALSE CLIPS> (eq foo foo foo foo) TRUE CLIPS> (eq 3 4) FALSE CLIPS> The and functionreturnsthe symbol TRUEif eachof itsargumentsevaluatestoTRUE, otherwise it returnsthe symbol FALSE.The and functionperformsshort-circuitedbooleanlogic.Eachargumentof the functionisevaluatedfrom lefttoright.If anyargumentevaluatestoFALSE,thenthe symbol FALSEis immediatelyreturnedbythe function. he or functionreturnsthe symbol TRUEif any of itsargumentsevaluatestoTRUE, otherwise itreturns the symbol FALSE.The or functionperformsshort-circuitedbooleanlogic.Eachargumentof the function isevaluatedfromlefttoright.If any argumentevaluatestoTRUE,thenthe symbol TRUE isimmediately returnedbythe function. The not functionreturnsthe symbol TRUEif its argumentevaluatestoFALSE, otherwiseitreturnsthe symbol FALSE. create$ functionappendsanynumberof fieldstogethertocreate a multifieldvalue. CLIPS> (create$ hammer drill saw screw pliers wrench) (hammer drill saw screw pliers wrench)
  • 16. CLIPS> (create$ (+ 3 4) (* 2 3) (/ 8 4)) (7 6 2) CLIPS> The nth$ functionwill returnaspecifiedfieldfromamultifieldvalue. The member$ functionwill tellif asingle fieldvalueiscontainedinamultifieldvalue. CLIPS> (member$ blue (create$ red 3 "text" 8.7 blue)) 5 CLIPS> (member$ 4 (create$ red 3 "text" 8.7 blue)) FALSE CLIPS> (member$ (create$ b c) (create$ a b c d)) (2 3) CLIPS> The str-cat functionwill concatenatesitsargumentsintoasingle string. The sym-cat functionwill concatenate itsargumentsintoasingle symbol.Itisfunctionallyidentical to the str-cat functionwiththe exceptionthatthe returnedvalue isa symbol andnota string. The sub-stringfunctionwill retrieve aportionof a stringfromanotherstring. The str-indexfunctionwill returnthe positionof astringinside anotherstring. CLIPS> (str-index "def" "abcdefghi") 4 CLIPS> (str-index "qwerty" "qwertypoiuyt") 1 CLIPS> (str-index "qwerty" "poiuytqwer") FALSE CLIPS> The eval functionevaluatesthe stringasthoughitwere enteredatthe commandprompt. Example CLIPS> (eval "(+ 3 4)") 7 CLIPS> (eval "(create$ a b c)") (a b c) CLIPS> Files he open function allows a user to open a file from the RHS of a rule and attaches a logical name to it. This function takes three arguments: (1) the name of the file to be opened; (2) the logical name which will be used by other CLIPS I/O functions to access the file; and (3) an optional mode specifier. The mode specifier must be one of the following strings:
  • 17. Mode Means "r" read access only "w" write access only "r+" read and write access "a" append access only "wb" binary write access Example CLIPS> (open "myfile.clp" writeFile "w") TRUE CLIPS> (open "MS-DOSdirectoryfile.clp" readFile) TRUE CLIPS> The close functionclosesafile streampreviouslyopenedwiththe opencommand.The file isspecified by a logical name previouslyattachedtothe desiredstream. Example CLIPS> (open "myfile.clp" writeFile "w") TRUE CLIPS> (open "MS-DOSdirectoryfile.clp" readFile) TRUE CLIPS> (close writeFile) TRUE CLIPS> (close writeFile) FALSE CLIPS> (close) TRUE CLIPS> (close) FALSE CLIPS> The function printoutallowsoutputtoa device attachedtoa logical name.The logical name mustbe specifiedandthe device musthave beenpreparedpreviouslyforoutput(e.g.,afile mustbe opened first).Tosendoutputto stdout, use a t forthe logical name.If the logical name nil isused,the printout functiondoesnothing. Example CLIPS> (printout t "Hello there!" crlf) Hello There! CLIPS> (open "data.txt" mydata "w") TRUE CLIPS> (printout mydata "red green") CLIPS> (close)
  • 18. TRUE The read functionallowsausertoinputinformationforasingle field.All of the standardfieldrules(e.g., multiple symbolsmustbe embeddedwithinquotes) apply. CLIPS> (open "data.txt" mydata "w") TRUE CLIPS> (printout mydata "red green") CLIPS> (close) TRUE CLIPS> (open "data.txt" mydata) TRUE CLIPS> (read mydata) red CLIPS> (read mydata) green CLIPS> (read mydata) EOF CLIPS> (close) TRUE CLIPS> The readline functionissimilartothe read function,butitallowsawhole stringtobe inputinsteadof a single field.Normally, readwill stopwhenitencountersadelimiter.The readline functiononlystops whenitencountersacarriage return,a semicolon,oranEOF. Anytabsor spacesinthe inputare returnedby readline asa part of the string.The readline functionreturnsastring. Example CLIPS> (open "data.txt" mydata "w") TRUE CLIPS> (printout mydata "red green") CLIPS> (close) TRUE CLIPS> (open "data.txt" mydata) TRUE CLIPS> (readline mydata) "red green" CLIPS> (readline mydata) EOF CLIPS> (close) TRUE CLIPS> The get-char functionallowsasingle charactertobe retrievedfromalogical name. Example
  • 19. CLIPS> (open example.txt example "w") TRUE CLIPS> (printout example "ABC" crlf) CLIPS> (close example) TRUE CLIPS> (open example.txt example) TRUE CLIPS> (get-char example) 65 CLIPS> (format nil "%c" (get-char example)) "B" CLIPS> (get-char example) 67 CLIPS> (get-char example) 10 CLIPS> (get-char example) -1 CLIPS> (progn (printout t "Press any character to continue...") (get-char t)) Press any character to continue... 13 CLIPS> The read-numberfunctionallowsauserto inputa single numberusingthe localizedformat(if one has beenspecifiedusingthe set-locale function).If alocalizedformathasnotbeenspecified,thenthe C formatfor a numberisused. Example CLIPS> (read-number) 34 34 CLIPS> (read-number) 34.0 34.0 CLIPS> (read-number) 23,0 "*** READ ERROR ***" CLIPS>