69 lines
1.2 KiB
Plaintext
69 lines
1.2 KiB
Plaintext
(deffacts solve-items
|
|
(solve 0 4)
|
|
(solve 1 4)
|
|
(solve 2 4)
|
|
(solve 3 4)
|
|
)
|
|
|
|
(defrule acker-m-0
|
|
?compute <- (compute 0 ?n)
|
|
=>
|
|
(retract ?compute)
|
|
(assert (ackerman 0 ?n (+ ?n 1)))
|
|
)
|
|
|
|
(defrule acker-n-0-pre
|
|
(compute ?m&:(> ?m 0) 0)
|
|
(not (ackerman =(- ?m 1) 1 ?))
|
|
=>
|
|
(assert (compute (- ?m 1) 1))
|
|
)
|
|
|
|
(defrule acker-n-0
|
|
?compute <- (compute ?m&:(> ?m 0) 0)
|
|
(ackerman =(- ?m 1) 1 ?val)
|
|
=>
|
|
(retract ?compute)
|
|
(assert (ackerman ?m 0 ?val))
|
|
)
|
|
|
|
(defrule acker-m-n-pre-1
|
|
(compute ?m&:(> ?m 0) ?n&:(> ?n 0))
|
|
(not (ackerman ?m =(- ?n 1) ?))
|
|
=>
|
|
(assert (compute ?m (- ?n 1)))
|
|
)
|
|
|
|
(defrule acker-m-n-pre-2
|
|
(compute ?m&:(> ?m 0) ?n&:(> ?n 0))
|
|
(ackerman ?m =(- ?n 1) ?newn)
|
|
(not (ackerman =(- ?m 1) ?newn ?))
|
|
=>
|
|
(assert (compute (- ?m 1) ?newn))
|
|
)
|
|
|
|
(defrule acker-m-n
|
|
?compute <- (compute ?m&:(> ?m 0) ?n&:(> ?n 0))
|
|
(ackerman ?m =(- ?n 1) ?newn)
|
|
(ackerman =(- ?m 1) ?newn ?val)
|
|
=>
|
|
(retract ?compute)
|
|
(assert (ackerman ?m ?n ?val))
|
|
)
|
|
|
|
(defrule acker-solve
|
|
(solve ?m ?n)
|
|
(not (compute ?m ?n))
|
|
(not (ackerman ?m ?n ?))
|
|
=>
|
|
(assert (compute ?m ?n))
|
|
)
|
|
|
|
(defrule acker-solved
|
|
?solve <- (solve ?m ?n)
|
|
(ackerman ?m ?n ?result)
|
|
=>
|
|
(retract ?solve)
|
|
(printout t "A(" ?m "," ?n ") = " ?result crlf)
|
|
)
|