; Simple facts (fact (parent abraham barack)) (fact (parent abraham clinton)) (fact (parent delano herbert)) (fact (parent fillmore abraham)) (fact (parent fillmore delano)) (fact (parent fillmore grover)) (fact (parent eisenhower fillmore)) ; Recursive facts (fact (ancestor ?a ?y) (parent ?a ?y)) (fact (ancestor ?a ?y) (parent ?a ?z) (ancestor ?z ?y)) ; Hierarchical facts (fact (dog (name abraham) (color white))) (fact (dog (name barack) (color tan))) (fact (dog (name clinton) (color white))) (fact (dog (name delano) (color white))) (fact (dog (name eisenhower) (color tan))) (fact (dog (name fillmore) (color brown))) (fact (dog (name grover) (color tan))) (fact (dog (name herbert) (color brown))) (query (dog (name clinton) (color ?color))) (query (dog (name clinton) ?info)) (query (dog (name ?name) (color ?color)) (ancestor ?ancestor ?name) (dog (name ?ancestor) (color ?color))) (fact (pedigree ?name) (dog (name ?name) . ?details)) (fact (pedigree ?child ?parent . ?rest) (parent ?parent ?child) (pedigree ?parent . ?rest)) (query (pedigree barack . ?lineage)) (query (ancestor ?a clinton) (ancestor ?a ?brown-dog) (dog (name ?brown-dog) (color brown))) ; List manipulation (fact (car (?a . ?r) ?a)) (fact (cdr (?a . ?r) ?r)) (fact (append-to-form () ?x ?x)) (fact (append-to-form (?a . ?r) ?y (?a . ?z)) (append-to-form ?r ?y ?z)) (query (append-to-form (a b c) (d e) ?result)) (query (append-to-form ?left ?right (a b c d e))) ; Anagrams (fact (insert ?a ?r (?a . ?r))) (fact (insert ?a (?b . ?r) (?b . ?s)) (insert ?a ?r ?s)) (query (insert a (r t) ?s)) (fact (anagram () ())) (fact (anagram (?a . ?r) ?b) (insert ?a ?s ?b) (anagram ?r ?s)) (query (anagram (a r t) ?anagram)) ; Unification (fact (unify ?x ?x)) (query (unify ((a b) c (a b)) (?x c ?x))) (query (unify ((a b) c (a b)) ((a ?y) ?z (a b)))) (query (unify ((a b) c (a b)) (?x ?x ?x))) (query (unify (?x ?x) ((a ?y c) (a b ?z)))) ; Underspecified queries (query (append-to-form (1 2) (3) ?what)) (query (append-to-form (1 2 . ?r) (3) ?what)) ;;; An evaluator in Logic ; Math (fact (ints 1 2)) (fact (ints 2 3)) (fact (ints 3 4)) (fact (ints 4 5)) (fact (ints 5 6)) (fact (ints 6 7)) (fact (ints 7 8)) (fact (ints 8 9)) (fact (ints 9 10)) (fact (add 1 ?x ?y) (ints ?x ?y)) (fact (add ?x ?y ?z) (ints ?x-1 ?x) (ints ?z-1 ?z) (add ?x-1 ?y ?z-1)) (fact (mul 1 ?x ?x) (ints ?some ?x)) (fact (mul ?x ?y ?z) (ints ?x-1 ?x) (mul ?x-1 ?y ?temp) (add ?temp ?y ?z)) ; Evaluation (fact (eval ?x ?x) (ints ?x ?some)) (fact (eval (+ ?op0 ?op1) ?val) (add ?arg0 ?arg1 ?val) (eval ?op0 ?arg0) (eval ?op1 ?arg1)) (fact (eval (* ?op0 ?op1) ?val) (mul ?arg0 ?arg1 ?val) (eval ?op0 ?arg0) (eval ?op1 ?arg1)) (query (eval (+ 1 1) ?what)) (query (eval (+ 1 (+ 2 3)) ?what)) ; (query (eval ?what 5))