diff --git a/csys/csys.lisp b/csys/csys.lisp index ae0d0d9..d701b81 100644 --- a/csys/csys.lisp +++ b/csys/csys.lisp @@ -8,7 +8,7 @@ (:shape :scopes/shape) (:util :scopes/util) (:alx :alexandria)) - (:export #:environment #:*environment* #:actions #:procs #:sensors + (:export #:environment #:*environment* #:add-action #:add-sensors #:send #:send-message #:neuron #:synapse #:std-proc #:make-neuron #:update-neuron #:create-sensor @@ -19,13 +19,23 @@ ;;;; environment: common information, with list of globally available actions (defclass environment () - ((actions :reader actions :initarg :actions :initform (make-hash-table)) + ((actions :reader actions :initarg :actions + :initform (make-hash-table :test #'equal)) (sensors :reader sensors :initarg :sensors :initform (make-hash-table :test #'equal)) (procs :reader procs :initarg :procs :initform (make-hash-table :test #'equal)))) -(defvar *environment* (make-instance 'environment)) +;(defvar *environment* (make-instance 'environment)) +(defvar *environment* nil) + +(defun add-action (key fn &optional (env *environment*)) + ;(util:lgi key fn env) + (setf (gethash key (actions env)) fn)) + +(defun add-sensors (key sns &optional (env *environment*)) + ;(util:lgi key sns env) + (setf (gethash key (sensors env)) sns)) ;;;; neurons (= behavior factories) and synapses (connection factories) @@ -47,7 +57,7 @@ (actor:become (neuron proc state syns env))) (defun std-proc (msg state syns env) - ;(util:lgi msg state) + ;(util:lgi msg state syns env) (destructuring-bind (nmsg nst nsyns) (handle-action msg state syns env :default #'remember) (forward nmsg nsyns) @@ -73,7 +83,7 @@ (defun find-sensors (msg) (let* ((key (cddr (shape:head msg))) (sns (gethash key (sensors *environment*)))) - ;(util:lgi key sns) + ;(util:lgi key sns *environment*) sns)) ;;;; effector procs for pseudo-neurons embedded in environment @@ -103,9 +113,10 @@ (defun create-sensor (msg state syns env) (let* ((key (shape:data msg)) - (sensor (make-neuron actor:*self* :state key)) + (sensor (make-neuron actor:*self* :state key :env env)) (nmsg (message:create (list :csys :created (car key) (cadr key))))) - (setf (gethash key (sensors env)) (list sensor)) + ;(setf (gethash key (sensors env)) (list sensor)) + (add-sensors key (list sensor) env) (list nmsg state syns))) (defun add (msg state syns env) diff --git a/test/test-csys.lisp b/test/test-csys.lisp index 78b4bc1..43a90e3 100644 --- a/test/test-csys.lisp +++ b/test/test-csys.lisp @@ -54,18 +54,17 @@ ;;;; test: initialization -(defun init () - (setf (gethash :sensor (csys:actions csys:*environment*)) #'csys:create-sensor) +(defun setup-test-init () + (setup-config) + (core:setup-services) + (setf (tc:receiver t:*test-suite*) (core:find-service :test-receiver)) + (csys:add-action :sensor #'csys:create-sensor) (let ((zero (csys:make-neuron nil :proc #'eff-proc))) - (setf (gethash '(:init :zero) (csys:sensors csys:*environment*)) (list zero)))) + (csys:add-sensors '(:init :zero) (list zero)))) (deftest test-init () (let ((csys:*environment* (make-instance 'test-env :test-suite t:*test-suite*))) - ;(setup-xxx) - (setup-config) - (core:setup-services) - (setf (tc:receiver t:*test-suite*) (core:find-service :test-receiver)) - (init) ; end of setup + (setup-test-init) (csys:send-message '(:csys :sensor :init :zero) '(:std :s1)) (csys:send-message '(:csys :sensor :init :zero) '(:std :s2)) (sleep 0.1)