Skip to content

Instantly share code, notes, and snippets.

@mrryanjohnston
Created November 10, 2024 01:16
Show Gist options
  • Save mrryanjohnston/2062ba2cba820d391cfe2ddfb88d028d to your computer and use it in GitHub Desktop.
Save mrryanjohnston/2062ba2cba820d391cfe2ddfb88d028d to your computer and use it in GitHub Desktop.
Loop
(deftemplate MAIN::meta-fact
(slot meta-fact)
(slot name))
(defrule MAIN::loop
?nil-meta-fact <- (meta-fact (meta-fact nil))
?announce-meta-fact <- (meta-fact (name ?name))
(not (meta-fact (meta-fact ?announce-meta-fact)))
=>
(println "Meta-fact: " ?name)
(modify ?nil-meta-fact (meta-fact ?announce-meta-fact))
(modify ?announce-meta-fact (meta-fact nil)))
CLIPS> (batch* program.bat)
CLIPS> (run 4)
Meta-fact: foo
Meta-fact: bar
Meta-fact: baz
Meta-fact: bat
CLIPS> (run 2)
Meta-fact: foo
Meta-fact: bar
CLIPS> (run 5)
Meta-fact: baz
Meta-fact: bat
Meta-fact: foo
Meta-fact: bar
Meta-fact: baz
CLIPS> (run 1)
FIRE 1 loop: f-2,f-1,*
Meta-fact: bat
<== f-2 (meta-fact (meta-fact nil) ...)
==> f-2 (meta-fact (meta-fact <Fact-1>) ...)
<== f-1 (meta-fact (meta-fact <Fact-4>) ...)
==> f-1 (meta-fact (meta-fact nil) ...)
==> Activation 0 loop: f-1,f-4,*
1 rules fired Run time is 0.00667309761047363 seconds.
149.855443209832 rules per second.
4 mean number of facts (4 maximum).
0 mean number of instances (0 maximum).
1 mean number of activations (1 maximum).
(load loop.clp)
(assert (meta-fact (name foo) (meta-fact
(assert (meta-fact (name bar) (meta-fact
(assert (meta-fact (name baz) (meta-fact
(assert (meta-fact (name bat))))))))))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment