;;;;;;;;;;;;;;;;;;;;;; ; Adding Atoms to the Knowledge Base ;;;;;;;;;;;;;;;;;;;;;; !(bind! &kb0 (new-space)) !(add-atom &kb0 (("S" "a"))) !(add-atom &kb0 (("S" "b"))) ;MeTTaLog Only: !(assertEqual (atom-count &kb0) 2) !(assertEqualToResult (get-atoms &kb0) ((("S" "a")) (("S" "b")))) ;;;;;;;;;;;;;;;;;;;;;; ; Removing Atoms from the Knowledge Base ;;;;;;;;;;;;;;;;;;;;;; !(bind! &kb1 (new-space)) !(add-atom &kb1 (("S" "a"))) !(add-atom &kb1 (("S" "b"))) !(add-atom &kb1 (("S" "c"))) ;; Remove an atom and test for success !(assertTrue (remove-atom &kb1 (("S" "b")))) ; "remove_atom on a present atom should return true" ;; Attempt to remove a non-existent atom and test for failure !(assertFalse (remove-atom &kb1 (("S" "bogus")))) ; "remove_atom on a missing atom should return false" ;; Verify the current state of the knowledge base !(assertEqualToResult (get-atoms &kb1) ((("S" "a")) (("S" "c")))) ;;;;;;;;;;;;;;;;;;;;;; ; Replacing Atoms in the Knowledge Base ;;;;;;;;;;;;;;;;;;;;;; !(bind! &kb2 (new-space)) (= (replace-atom $space $before $after) (if (remove-atom $space $before) (add-atom $space $after) False)) !(add-atom &kb2 (("S" "a"))) !(add-atom &kb2 (("S" "b"))) !(add-atom &kb2 (("S" "c"))) ;; Replace an atom and verify the operation was successful !(assertTrue (replace-atom &kb2 (("S" "b")) (("S" "d")))) ;; Check the new set of atoms in the knowledge base !(assertEqualToResult (get-atoms &kb2) ((("S" "a")) (("S" "d")) (("S" "c")))) ;;;;;;;;;;;;;;;;;;;;;; ; Querying Atoms in the Knowledge Base ;;;;;;;;;;;;;;;;;;;;;; !(bind! &kb3 (new-space)) !(add-atom &kb3 (E (("S" "A")) (("S" "B")))) !(add-atom &kb3 (E (("S" "C")) (("S" "D")))) ;; Adding a duplicate pattern for testing multiple matches !(add-atom &kb3 (E (("S" "A")) (("S" "E")))) ;; Verify that the query returns the expected matches !(assertEqualToResult (match &kb3 (E (("S" "A")) $XX) $XX) ((("S" "B")) (("S" "E")))) ;;;;;;;;;;;;;;;;;;;;;; ; Comprehensive Test with Add, Remove, Query ;;;;;;;;;;;;;;;;;;;;;; !(bind! &kb4 (new-space)) !(add-atom &kb4 (("S" "initial-state"))) ;; Perform a sequence of operations !(add-atom &kb4 (("S" "x"))) !(remove-atom &kb4 (("S" "initial-state"))) !(add-atom &kb4 (("S" "y"))) ;; Final state should have "x" and "y" only !(assertEqualToResult (get-atoms &kb4) ((("S" "x")) (("S" "y")))) ;; Query to test the presence of "x" and "y" !(assertTrue (query &kb4 (("S" "x")))) !(assertTrue (query &kb4 (("S" "y"))))