File: stack.clp

package info (click to toggle)
clips-doc 6.23-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 7,160 kB
  • ctags: 27
  • sloc: makefile: 26
file content (29 lines) | stat: -rw-r--r-- 796 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(defrule push-value
 ?push-value <- (push-value ?name ?value)
 ?stack <- (stack ?name $?rest)
=>
 (retract ?push-value ?stack)
 (assert (stack ?name ?value $?rest))
 (printout t "Pushing value " ?value " from stack " ?name crlf))
 
 (defrule pop-value-valid
  ?pop-value <- (pop-value ?name)
  ?stack <- (stack ?name ?value $?rest)
 =>
  (retract ?pop-value ?stack)
  (assert (stack ?name $?rest))
  (printout t "Popping value " ?value " from stack " ?name crlf))  

(defrule pop-value-invalid
 ?pop-value <- (pop-value ?name)
 (stack ?name)
=>
 (retract ?pop-value)
 (printout t "Attempting to pop an empty stack: " ?name crlf))
 
(deffacts initial-setup
 (stack letters a b c)    ; initial stacks
 (stack numbers 1 2)
 (push-value letters d)   ; initial actions on stacks
 (pop-value numbers)
)