diff --git a/csys/csys.lisp b/csys/csys.lisp index 435d149..fe0720c 100644 --- a/csys/csys.lisp +++ b/csys/csys.lisp @@ -10,11 +10,12 @@ (:shape :scopes/shape) (:util :scopes/util) (:alx :alexandria)) - (:export #:environment #:*environment* #:detectors + (:export #:environment #:*environment* #:effectors #:init #:send #:send-message #:neuron #:synapse - #:create-neuron #:update-neuron)) + #:make-neuron #:update-neuron + #:handle-action)) (in-package :scopes/csys) @@ -24,17 +25,15 @@ ((actions :reader actions :initarg :actions :initform (make-hash-table)) (sensors :reader sensors :initarg :sensors :initform (make-hash-table :test #'equal)) - (detectors :reader detectors :initarg :detectors + (effectors :reader effectors :initarg :effectors :initform (make-hash-table :test #'equal)))) (defvar *environment* (make-instance 'environment)) -(defun init (&optional probe) +(defun init (zero) (setf (gethash :sensor (actions *environment*)) #'create-sensor) - (let* ((default-det (or probe (actor:create (neuron #'do-log)))) - (zero (make-neuron default-det :state 0))) - (setf (gethash '(:init :zero) (sensors *environment*)) (list zero)) - (setf (gethash :default (detectors *environment*)) (list default-det)))) + (setf (gethash '(:init :zero) (sensors *environment*)) (list zero)) + (setf (gethash :default (effectors *environment*)) (list zero))) ;;;; sensors: neurons receiving messages from environment, addressable via message head @@ -58,9 +57,9 @@ (defun do-log (msg state syns env) (util:lgi msg)) -(defun find-detectors (key &optional (default-key :default) (env *environment*)) - (let ((dts (detectors env))) - (gethash key dts (gethash default-key dts)))) +(defun find-effectors (key &optional (default-key :default) (env *environment*)) + (let ((effs (effectors env))) + (gethash key effs (gethash default-key effs)))) ;;;; neurons (= behavior factories) and synapses (connection factories) @@ -74,7 +73,8 @@ (defun make-neuron (syn-target &key (proc #'std-proc) state (syn-op #'identity) (env *environment*)) - (actor:create (neuron proc state (list (synapse syn-target syn-op)) env))) + (let ((syns (if syn-target (list (synapse syn-target syn-op)) nil))) + (actor:create (neuron proc state syns env)))) (defun update-neuron (proc state syns &optional (env *environment*)) (actor:become (neuron proc state syns env))) diff --git a/test/test-csys.lisp b/test/test-csys.lisp index d77f5ee..2fcb408 100644 --- a/test/test-csys.lisp +++ b/test/test-csys.lisp @@ -27,9 +27,11 @@ (let ((t:*test-suite* (test-suite env)) (val (shape:data msg))) (util:lgi msg state) - (unless (consp val) - (let ((nst (in-seq val state :remove t))) - (csys:update-neuron #'probe nst syns env))))) + (destructuring-bind (msg state syns) + (csys:handle-action msg state syns env) + (unless (consp val) + (let ((nst (in-seq val state :remove t))) + (csys:update-neuron #'probe nst syns env)))))) (defun add (msg state syns env) (list msg (+ (shape:data msg) state) syns env)) @@ -40,9 +42,8 @@ (async:init) (let* ((t:*test-suite* (make-instance 't:test-suite :name "csys")) (csys:*environment* (make-instance 'test-env :test-suite t:*test-suite*)) - (probe (actor:create - (csys:neuron #'probe '(1 3 4 5) - nil csys:*environment*)))) + (probe (csys:make-neuron nil :proc #'probe :state '(1 3 4 5) + :env csys:*environment*))) (load (t:test-path "config-csys" "etc")) (core:setup-services) (unwind-protect @@ -53,7 +54,7 @@ (t:show-result)))) (deftest test-init (probe) - ;(setf (gethash '(:std :d0) (csys:detectors csys:*environment*)) probe) + ;(setf (gethash '(:std :d0) (csys:effectors csys:*environment*)) probe) (csys:init probe) (csys:send-message '(:csys :sensor :init :zero) '(:std :s1)) (csys:send-message '(:csys :sensor :init :zero) '(:std :s2)) diff --git a/util/util.lisp b/util/util.lisp index 84c7eee..d741ab9 100644 --- a/util/util.lisp +++ b/util/util.lisp @@ -31,7 +31,7 @@ (defun make-vars-format (vars &optional info) (let ((prefix (if info (format nil "~a: " info) ""))) - (format nil "~a~{~(~a~): ~~S ~}" prefix vars))) + (format nil "~a~{~(~a~): ~~A ~}" prefix vars))) (defmacro lg (level info &rest vars) (let ((lm (find-symbol (string level) :log))