Update of /project/cells/cvsroot/triple-cells In directory clnet:/tmp/cvs-serv15290
Modified Files: api.lisp core.lisp dataflow.lisp defpackage.lisp hello-world.lisp observer.lisp triple-cells.lpr Log Message: Version 2, with integrity
--- /project/cells/cvsroot/triple-cells/api.lisp 2007/12/23 10:04:56 1.1 +++ /project/cells/cvsroot/triple-cells/api.lisp 2008/02/23 01:22:11 1.2 @@ -1,25 +1,8 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: triple-cells; -*- ;;; ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; -;;; Permission is hereby granted, free of charge, to any person obtaining a copy -;;; of this software and associated documentation files (the "Software"), to deal -;;; in the Software without restriction, including without limitation the rights -;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -;;; copies of the Software, and to permit persons to whom the Software is furnished -;;; to do so, subject to the following conditions: -;;; -;;; The above copyright notice and this permission notice shall be included in -;;; all copies or substantial portions of the Software. -;;; -;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -;;; IN THE SOFTWARE.
(in-package :3c) @@ -27,10 +10,9 @@ ;;; --- API ---------------------------------------
(defun 3c-init () - (setf *3c-pulse* 0) (setf *calc-nodes* nil) (setf *3c?* (make-hash-table :test 'equal)) - (setf *3c-observers* (make-hash-table :test 'equal))) + (setf *3c-observers* (make-hash-table :test 'equalp)))
;;; --- API constructors -------------------------------
@@ -59,6 +41,7 @@ (add-triple c !ccc:type !ccc:ruled) (add-triple c !ccc:rule (mk-upi (prin1-to-string rule))) (when ephemeral + ;(trc "bingo ephemeral" rule) (add-triple c !ccc:ephemeral !ccc:t)) (when test (add-triple c !ccc:test (mk-upi test))) @@ -71,13 +54,8 @@ ;(trc "c? value tr" tr-cv) c)))
- - ;;; --- API accessors
-(defun clear-usage (cell) - (delete-triples :s cell :p !ccc:uses)) - (defun 3c (s p) (assert (and s p)) (bif (cell (stmt-cell s p)) @@ -102,21 +80,18 @@ ;(trc "tr-value" (triple-id tr-value))
(unless (equal new-value prior-value) - (3c-pulse-advance :setf-3c) - (when tr-value - (delete-triple (triple-id tr-value))) - - (let* ((new-value-upi (mk-upi new-value)) - (tr-value-new (add-triple s p new-value-upi))) - - (delete-triples :s cell :p !ccc:value) - - (let ((tr-cell-value-new (add-triple cell !ccc:value new-value-upi))) + (with-3c-integrity (:change cell) + (when tr-value + (delete-triple (triple-id tr-value))) + + (let ((new-value-upi (mk-upi new-value))) + (add-triple s p new-value-upi) + ; cell maintenance, including its own copy of value + (delete-triples :s cell :p !ccc:value) + (add-triple cell !ccc:value new-value-upi) (3c-propagate cell) (cell-observe-change cell s p new-value prior-value t) (when (3c-ephemeral? cell) - ; fix up cell... - (delete-triple tr-cell-value-new) - ; reset value itself to nil - (delete-triple tr-value-new))))))) + (add-triple !ccc:ufb-reset-ephemerals (mk-upi 42) cell))))))) +
--- /project/cells/cvsroot/triple-cells/core.lisp 2007/12/23 10:04:53 1.3 +++ /project/cells/cvsroot/triple-cells/core.lisp 2008/02/23 01:22:11 1.4 @@ -1,38 +1,23 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: triple-cells; -*- ;;; +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. -;;; -;;; Permission is hereby granted, free of charge, to any person obtaining a copy -;;; of this software and associated documentation files (the "Software"), to deal -;;; in the Software without restriction, including without limitation the rights -;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -;;; copies of the Software, and to permit persons to whom the Software is furnished -;;; to do so, subject to the following conditions: -;;; -;;; The above copyright notice and this permission notice shall be included in -;;; all copies or substantial portions of the Software. -;;; -;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -;;; IN THE SOFTWARE. -
(in-package :3c)
;; --- triple-cells ---
-(defvar *3c-pulse*) (defvar *calc-nodes*)
-(defun 3c-pulse-advance (dbg) +(defun 3c-pulse-advance (&optional (dbg :anon-advance)) (declare (ignorable dbg)) - (trc "PULSE> ------------------" (1+ *3c-pulse*) dbg) - (incf *3c-pulse*)) + (trc "PULSE> ---- advancing:" dbg) + (delete-triples :s !ccc:integrity :p !ccc:pulse) + (add-triple !ccc:integrity !ccc:pulse (new-blank-node))) + +(defun 3c-pulse () + (bwhen (tr (get-triple :s !ccc:integrity :p !ccc:pulse)) + (object tr)))
;;; --- low-level 3cell accessors
@@ -41,12 +26,18 @@ (part-value (object tr))))
(defun (setf 3c-cell-value) (new-value c) + (3c-cell-make-current c) + (delete-triples :s c :p !ccc:value) (when new-value (add-triple c !ccc:value (mk-upi new-value))))
-(defun 3c-pulse (c) - (get-sp-value c !ccc:pulse)) +(defun 3c-cell-make-current (c) + (delete-triples :s c :p !ccc:pulse) + (add-triple c !ccc:pulse (3c-pulse))) + +(defun 3c-cell-pulse (c) + (object (get-sp c !ccc:pulse)))
;;; --- rule storage -------------------------------
@@ -55,7 +46,7 @@ #+dump (maphash (lambda (k v) (trc "kk" k v)) *3c?*)
-(defun (setf 3c?-rule) ( rule c-node) +(defun (setf 3c?-rule) (rule c-node) (assert (functionp rule) () "3c?-rule setf not rule: ~a ~a" (type-of rule) rule) ;;(trc "storing rule!!!! for" c-node rule) (setf (gethash c-node *3c?*) rule)) @@ -102,8 +93,6 @@ (intern (nsubstitute #- ## (up$ (string-trim "<>" s)))))
- - ;;; --- access ------------------------------------------
(defun subject-cells-node (s) @@ -121,42 +110,65 @@ (object tr)))
(defun cell-predicate (c) - (predicate (car (get-triples-list :o c)))) + (object (get-sp c !ccc:is-cell-of-predicate)))
-(defun cell-subject (c) - (subject (car (get-triples-list - :p !ccc:cells - :o (subject (car (get-triples-list :o c))))))) +(defun cell-model (c) + (object (get-sp c !ccc:is-cell-of-model))) + +(defun 3c-install-cell (s p o) + (add-triple (subject-cells-node s) p o) + (add-triple o !ccc:is-cell-of-model s) + (add-triple o !ccc:is-cell-of-predicate p))
(defun stmt-new (s p o &aux (tv o)) - (when (3c-cell? o) - (add-triple (subject-cells-node s) p o) - + (cond + ((3c-cell? o) + (3c-install-cell s p o) (cond ((3c-input? o) - (3c-pulse-advance :new-input) ;; why does creating data advance pulse? - (setf tv (3c-cell-value o))) - - ((3c-ruled? o) - (setf tv (funcall (3c?-rule o) o nil nil)) - (setf (3c-cell-value o) tv)) - - (t (break "unknown cell" o))) - - (add-triple o !ccc:pulse (mk-upi *3c-pulse*)) - (setf tv (3c-cell-value o))) - - (when tv - (add-triple s p (mk-upi tv))) - - (cell-observe-change o s p tv nil nil)) + (bwhen (tv (3c-cell-value o)) + (add-triple s p (mk-upi tv))) + (with-3c-integrity (!ccc:observe o) + (cell-observe-change o s p tv nil nil))) + ((3c-ruled? o) + (with-3c-integrity (!ccc:awaken-ruled-cell o) + (3c-awaken-ruled-cell o))) + (t (break "unknown cell" o)))) + + (t (when tv + (let ((tr (add-triple s p (mk-upi tv)))) + (trc "recording k under" p :id tr tv) + (with-3c-integrity (!ccc:observe (mk-upi tr)) + (cell-observe-change o s p tv nil nil))))))) + +(defun 3c-awaken-ruled-cell (c) + (let ((s (cell-model c)) + (p (cell-predicate c)) + (tv (funcall (3c?-rule c) c nil nil))) + ;(trc "awakening ruled" p) + (setf (3c-cell-value c) tv) + (cell-observe-change c s p tv nil nil)))
(defun 3c-make (type &key id) "Generates blank node and associates it with type and other options" (let ((node (new-blank-node))) (trc "3c-make storing type" type (type-of type)) - (add-triple node !ccc:instance-of type) ; (mk-upi type)) + (add-triple node !ccc:instance-of type) (when id (3c-register node id)) node))
+(defun 3c-register (node name) + (add-triple (mk-upi name) !ccc:id node)) + +(defun 3c-find-id (name) + (object (get-sp (mk-upi name) !ccc:id))) + +(defun clear-usage (cell) + (delete-triples :s cell :p !ccc:uses)) + +#+test +(progn + (make-tutorial-store) + (let ((x (3c-make !<plane> :id "x-plane"))) + (3c-find-id "x-plane"))) --- /project/cells/cvsroot/triple-cells/dataflow.lisp 2007/12/23 10:04:56 1.1 +++ /project/cells/cvsroot/triple-cells/dataflow.lisp 2008/02/23 01:22:11 1.2 @@ -1,44 +1,25 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: triple-cells; -*- ;;; ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; -;;; Permission is hereby granted, free of charge, to any person obtaining a copy -;;; of this software and associated documentation files (the "Software"), to deal -;;; in the Software without restriction, including without limitation the rights -;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -;;; copies of the Software, and to permit persons to whom the Software is furnished -;;; to do so, subject to the following conditions: -;;; -;;; The above copyright notice and this permission notice shall be included in -;;; all copies or substantial portions of the Software. -;;; -;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -;;; IN THE SOFTWARE. -
(in-package :3c)
(defun 3c-propagate (cell) - (loop for user in (get-triples-list :p !ccc:uses :o cell) - do (trc nil "propagating !!!!!!!!!!!!" cell :to (subject user)) - (3c-ensure-current (subject user)))) + (3c-ufb-add !ccc:ufb-tell-dependents cell))
;;; --- integrity -----------------(part-value prior-value)-----------------------------
(defun 3c-ensure-current (cell &optional s p) ;; when we don't have s/p extend to work backwards from cell (unless s - (setf s (cell-subject cell) - p (cell-predicate cell))) + (setf s (cell-model cell)) + (setf p (cell-predicate cell))) ;(trc "3c-ensure-current" s p) (when (and cell (3c-ruled? cell)) - (when (> *3c-pulse* (3c-pulse cell)) - ;(trc "old" (3c-cell-value cell)) + (unless (upi= (3c-pulse) (3c-cell-pulse cell)) + ; (trc "old" (3c-cell-value cell)) + ;(trc "HEY!!! what happened to checking if necessary to rerun rule?!") (let* ((prior-value (3c-cell-value cell)) (new-value (progn (clear-usage cell) @@ -48,12 +29,17 @@ (test (or (bwhen (test (get-sp-value cell !ccc:test)) (intern test)) 'EQL))) - ;(trc "prop new" new-value) - (unless (funcall test new-value prior-value) - (let ((prior-value (3c-cell-value cell))) - (setf (3c-cell-value cell) new-value) - (delete-triples :s s :p p) - (when new-value - (add-triple s p (mk-upi new-value))) - (3c-propagate cell) - (cell-observe-change cell s p new-value prior-value t))))))) + + (if (funcall test new-value prior-value) + (3c-cell-make-current cell) + (progn + ;(trc "prop new" new-value :prior prior-value) + (let ((prior-value (3c-cell-value cell))) + (setf (3c-cell-value cell) new-value) + (delete-triples :s s :p p) + (when new-value + (add-triple s p (mk-upi new-value))) + (3c-propagate cell) + (cell-observe-change cell s p new-value prior-value t) + (when (3c-ephemeral? cell) + (add-triple !ccc:ufb-reset-ephemerals (mk-upi 42) cell))))))))) --- /project/cells/cvsroot/triple-cells/defpackage.lisp 2007/12/20 13:08:17 1.1 +++ /project/cells/cvsroot/triple-cells/defpackage.lisp 2008/02/23 01:22:11 1.2 @@ -1,6 +1,6 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: cl-user; -*- ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; ;;; Permission is hereby granted, free of charge, to any person obtaining a copy ;;; of this software and associated documentation files (the "Software"), to deal @@ -29,5 +29,5 @@
(defpackage :triple-cells (:nicknames :3c) - (:use #:common-lisp #:utils-kt #:db.agraph #:cells)) ;; cells just fro TRC (so far) + (:use #:common-lisp #:utils-kt #:db.agraph #:cells)) ;; cells just for TRC (so far)
--- /project/cells/cvsroot/triple-cells/hello-world.lisp 2007/12/23 10:04:56 1.3 +++ /project/cells/cvsroot/triple-cells/hello-world.lisp 2008/02/23 01:22:11 1.4 @@ -1,124 +1,114 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: triple-cells; -*- ;;; ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; -;;; Permission is hereby granted, free of charge, to any person obtaining a copy -;;; of this software and associated documentation files (the "Software"), to deal -;;; in the Software without restriction, including without limitation the rights -;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -;;; copies of the Software, and to permit persons to whom the Software is furnished -;;; to do so, subject to the following conditions: -;;; -;;; The above copyright notice and this permission notice shall be included in -;;; all copies or substantial portions of the Software. -;;; -;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -;;; IN THE SOFTWARE.
(in-package :3c)
- -(defun 3c-test-reopen () - (close-triple-store) - (open-triple-store "hello-world" - :directory (project-path) - :if-does-not-exist :error) - (let ((dell (3c-find-id "dell")) - (happen !hw:happen) - (location !hw:location) - (response !hw:response)) - - (trc "start" (3c dell happen)(3c dell location)(3c dell response)) - (setf (3c dell happen) "knock-knock") - (setf (3c dell happen) "arrive") - (setf (3c dell happen) "knock-knock") - )) +#+test +(3c-test-reopen)
#+test -(3c-test) +(3c-test-build)
(defun 3c-test () + (3c-test-build) + (3c-test-reopen) + ) + +(defun 3c-test-build () (test-prep "3c") - (unwind-protect - (progn - (3c-init) + ; + ; initialize new DB altogether + ; + (create-triple-store "hello-world" + :if-exists :supersede + :directory (project-path)) + (register-namespace "hw" "helloworld#" :errorp nil) + (register-namespace "ccc" "triplecells#" :errorp nil) + ; + ; initialize new DB session + ; + (3c-init) + (let ((*synchronize-automatically* t)) (enable-print-decoded t) - (create-triple-store "hello-world" - :if-exists :supersede - :directory (project-path)) - (register-namespace "hw" "helloworld#" :errorp nil) - (register-namespace "ccc" "triplecells#" :errorp nil)
- + (make-observer !hw:echo-happen (trc "happen:" new-value)) + (make-observer !hw:location (trc "We are now" new-value )) + (make-observer !hw:obs-response (trc "Speak:" new-value ))
- (let ((dell (3c-make !hw:computer :id "dell")) - (happen !hw:happen) - (location !hw:location) - (response !hw:response)) - (assert dell) - - (make-observer !hw:echo-happen (trc "happen:" new-value)) - (make-observer !hw:obs-location (trc "We are now" new-value )) - (make-observer !hw:obs-response (trc "Speak:" new-value )) - - (stmt-new dell happen #+const "test" - (3c-in nil :ephemeral t - :observer !hw:echo-happen - :test 'equal)) - - (stmt-new dell location - (3c? ;(trc "RULE-ENTRY>" *3c-pulse*) - (let ((h (3c (3c-find-id "dell") !hw:happen))) - ;(trc "rule sees happen" h) - (cond - ((string-equal h "arrive") "home") - ((string-equal h "leave") "away") - (cache? cache) - (t "away"))) - :observer !hw:obs-location - :test 'equal)) - - (stmt-new dell response - (3c? (let* ((dell (3c-find-id "dell")) - (h (3c dell !hw:happen)) - (loc (3c dell !hw:location))) - ;(trc "response rule sees happen" h :loc loc) - (cond - ((string-equal h "knock-knock") - (cond - ((string-equal loc "home") "who's there?") - (t "silence"))) - ((string-equal h "arrive") - (cond - ((string-equal loc "home") "honey, i am home!"))) - ((string-equal h "leave") + (with-3c-integrity (:change) ;; change advances pulse + (let ((dell (3c-make !hw:computer :id "dell")) + (happen !hw:happen) + (location !hw:location) + (response !hw:response)) + (declare (ignorable response location)) + (assert dell) + + (stmt-new dell happen + (3c-in nil :ephemeral t + :observer !hw:echo-happen + :test 'equal)) + + + (stmt-new dell location + (3c? (let ((h (3c (3c-find-id "dell") !hw:happen))) + ;(trc "rule sees happen" h) (cond - ((string-equal loc "away") "bye-bye!"))) - (t cache))) - :observer !hw:obs-response - :test 'equal)) - - (time - (progn - (setf (3c dell happen) "knock-knock") - (loop repeat 2 do - (setf (3c dell happen) "knock-knock")) - (setf (3c dell happen) "arrive") + ((string-equal h "arrive") "home") + ((string-equal h "leave") "away") + (cache? cache) + (t "away"))) + :observer !hw:location + :test 'equal)) + ;;#+step2 + (progn
- (setf (3c dell happen) "knock-knock") - (setf (3c dell happen) "leave"))) - - ))) - (dribble))) - + (stmt-new dell response + (3c? (let* ((dell (3c-find-id "dell")) + (h (3c dell !hw:happen)) + (loc (3c dell !hw:location))) + ;(trc "response rule sees happen" h :loc loc) + (cond + ((string-equal h "knock-knock") + (cond + ((string-equal loc "home") "who's there?") + (t "silence"))) + ((string-equal h "arrive") + (cond + ((string-equal loc "home") "honey, i am home!"))) + ((string-equal h "leave") + (cond + ((string-equal loc "away") "bye-bye!"))) + (t cache))) + :observer !hw:obs-response + :ephemeral t + :test 'equal)))))))
+(defun 3c-test-reopen () + (close-triple-store) + (open-triple-store "hello-world" + :directory (project-path) + :if-does-not-exist :error) + (when (3c-integrity-managed?) (break "1")) + (time + (let ((dell (3c-find-id "dell")) + (happen !hw:happen) + (location !hw:location) + (response !hw:response)) + + (trc "---------------- start-------------------------- " (3c dell happen)(3c dell location)(3c dell response)) + (when (3c-integrity-managed?) (break "2")) + (setf (3c dell happen) "knock-knock") + (loop repeat 2 do + (setf (3c dell happen) "knock-knock")) + (setf (3c dell happen) "arrive") + + (setf (3c dell happen) "knock-knock") + (setf (3c dell happen) "leave") + )))
--- /project/cells/cvsroot/triple-cells/observer.lisp 2007/12/23 10:04:56 1.1 +++ /project/cells/cvsroot/triple-cells/observer.lisp 2008/02/23 01:22:11 1.2 @@ -1,26 +1,8 @@ ;; -*- mode: Lisp; Syntax: Common-Lisp; Package: triple-cells; -*- ;;; ;;; -;;; Copyright (c) 1995,2003 by Kenneth William Tilton. +;;; Copyright (c) 2008 by Kenneth William Tilton. ;;; -;;; Permission is hereby granted, free of charge, to any person obtaining a copy -;;; of this software and associated documentation files (the "Software"), to deal -;;; in the Software without restriction, including without limitation the rights -;;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -;;; copies of the Software, and to permit persons to whom the Software is furnished -;;; to do so, subject to the following conditions: -;;; -;;; The above copyright notice and this permission notice shall be included in -;;; all copies or substantial portions of the Software. -;;; -;;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -;;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -;;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -;;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -;;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -;;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -;;; IN THE SOFTWARE. -
(in-package :3c)
@@ -31,18 +13,46 @@ ,form)))
(defun call-make-observer (id observer) - (trc "storing observer!!!!!!!!!!!" id !ccc:observer-id-rule (mk-upi (prin1-to-string observer))) (add-triple id !ccc:observer-id-rule (mk-upi (prin1-to-string observer))) (setf (3c-observer id) (eval observer))) ;; while we're at it
;;; --- 3cell observation --------------------------------------------------------
- (defun cell-observe-change (cell s p new-value prior-value prior-value?) - (bif (otr (get-sp cell !ccc:observer-is)) - (funcall (3c-observer (object otr)) s p new-value prior-value prior-value?) - (trc "unobserved" s p))) + (cond + (cell + (loop for observer in (get-triples-list :s cell :p !ccc:observer-is) + do (funcall (3c-observer (object observer)) s p + new-value prior-value prior-value?))) + (p (loop for observer in (get-triples-list :s p :p !ccc:observer-id-rule) + do (funcall (3c-observer-from-rule-triple observer) s p + new-value prior-value prior-value?))))) + +;;;(defun cell-observe-change (cell s p new-value prior-value prior-value?) +;;; (trc "observing" p new-value) +;;; (if (get-triple :s cell :p !ccc:observer-is) ; just need one to decide to schedule +;;; (let ((o (new-blank-node))) ;; o = observation, an instance of a cell to be observed and its parameters +;;; (add-triple o !ccc:obs-s cell) +;;; (add-triple o !ccc:obs-p cell) +;;; (add-triple o !ccc:obs-new-value (mk-upi new-value)) +;;; (add-triple o !ccc:obs-prior-value (mk-upi prior-value)) +;;; (add-triple o !ccc:obs-prior-value? (mk-upi prior-value?)) +;;; (add-triple !ccc:obs-queue (mk-upi (get-internal-real-time)) o)) +;;; (trc "unobserved" s p))) + +;;;(defun process-observer-queue () +;;; (index-new-triples) +;;; (let ((oq (get-triples-list :s !ccc:obs-queue))) +;;; (loop for observation in (mapcar 'object oq) +;;; for s = (object (get-sp observation !ccc:obs-s)) +;;; for p = (object (get-sp observation !ccc:obs-p)) +;;; for new-value = (get-sp-value observation !ccc:obs-new-value) +;;; for prior-value = (get-sp-value observation !ccc:obs-prior-value) +;;; for prior-value? = (get-sp-value observation !ccc:obs-prior-value) +;;; do (loop for observer in (get-triples-list :s s :p !ccc:observer-is) +;;; do (funcall (3c-observer (object observer)) s p +;;; new-value prior-value prior-value?)))))
;;; ---------------------------------------------------- @@ -60,3 +70,8 @@ (assert fn$)
(eval (read-from-string fn$)))))) + +(defun 3c-observer-from-rule-triple (tr) + (let ((fn$ (triple-value tr))) + (assert fn$) + (eval (read-from-string fn$)))) --- /project/cells/cvsroot/triple-cells/triple-cells.lpr 2007/12/23 10:04:56 1.3 +++ /project/cells/cvsroot/triple-cells/triple-cells.lpr 2008/02/23 01:22:11 1.4 @@ -1,4 +1,4 @@ -;; -*- lisp-version: "8.1 [Windows] (Dec 2, 2007 6:32)"; cg: "1.103.2.10"; -*- +;; -*- lisp-version: "8.1 [Windows] (Feb 1, 2008 18:35)"; cg: "1.103.2.10"; -*-
(in-package :cg-user)
@@ -6,14 +6,14 @@
(define-project :name :triple-cells :modules (list (make-instance 'module :name "defpackage.lisp") + (make-instance 'module :name "ag-utilities.lisp") (make-instance 'module :name "core.lisp") - (make-instance 'module :name "agraph-tutorial") - (make-instance 'module :name "namespace.lisp") (make-instance 'module :name "api.lisp") - (make-instance 'module :name "ag-utilities.lisp") (make-instance 'module :name "dataflow.lisp") (make-instance 'module :name "observer.lisp") - (make-instance 'module :name "hello-world.lisp")) + (make-instance 'module :name "hello-world.lisp") + (make-instance 'module :name "read-me.lisp") + (make-instance 'module :name "3c-integrity.lisp")) :projects (list (make-instance 'project-module :name "..\Cells\cells")) :libraries nil