From 90fad032683a55c3c4fa3b8c23dc67c74010c998 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Mon, 6 Apr 2026 14:07:44 +0200 Subject: [PATCH] csys: add-sensor; action id = domain + action; sensor id = domain + class + item --- csys/csys.lisp | 20 +++++++++++--------- test/test-csys.lisp | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/csys/csys.lisp b/csys/csys.lisp index 0a20a1a..7b9bafc 100644 --- a/csys/csys.lisp +++ b/csys/csys.lisp @@ -8,7 +8,7 @@ (:shape :scopes/shape) (:util :scopes/util) (:alx :alexandria)) - (:export #:environment #:*environment* #:add-action #:add-sensors + (:export #:environment #:*environment* #:add-action #:add-sensor #:send #:send-message #:neuron #:synapse #:std-proc #:make-neuron #:update-neuron #:create-sensor @@ -22,7 +22,7 @@ ((actions :reader actions :initarg :actions :initform (make-hash-table :test #'equal)) (sensors :reader sensors :initarg :sensors - :initform (make-hash-table :test #'equal)) + :initform (make-hash-table :test #'equal :synchronized t)) (procs :reader procs :initarg :procs :initform (make-hash-table :test #'equal)))) @@ -33,9 +33,9 @@ ;(util:lgi key fn *environment*) (setf (gethash key (actions *environment*)) fn)) -(defun add-sensors (key sns) - ;(util:lgi key sns *environment*) - (setf (gethash key (sensors *environment*)) sns)) +(defun add-sensor (key sn) + (let ((sns (sensors *environment*))) + (setf (gethash key sns) (adjoin sn (gethash key sns))))) ;;;; neurons (= behavior factories) and synapses (connection factories) @@ -81,7 +81,8 @@ (actor:send sn msg))) (defun find-sensors (msg) - (let* ((key (cddr (shape:head msg))) + (let* ((head (shape:head msg)) + (key (cons (car head) (cddr head))) (sns (gethash key (sensors *environment*)))) ;(util:lgi key sns *environment*) sns)) @@ -98,7 +99,8 @@ (funcall s msg))) (defun handle-action (msg state syns &key (default #'no-op)) - (let* ((key (shape:head-value msg :action)) + (let* ((head (shape:head msg)) + (key (list (car head) (cadr head))) (act (gethash key (actions *environment*) default))) (funcall act msg state syns))) @@ -112,10 +114,10 @@ (list msg (shape:data msg) syns)) (defun create-sensor (msg state syns) - (let* ((key (shape:data msg)) + (let* ((key (cons (car (shape:head msg)) (shape:data msg))) (sensor (make-neuron actor:*self* :state key)) (nmsg (message:create (list :csys :created (car key) (cadr key))))) - (add-sensors key (list sensor)) + (add-sensor key sensor) (list nmsg state syns))) (defun add (msg state syns) diff --git a/test/test-csys.lisp b/test/test-csys.lisp index 22fde32..855a8a1 100644 --- a/test/test-csys.lisp +++ b/test/test-csys.lisp @@ -58,9 +58,9 @@ (setup-config) (core:setup-services) (setf (tc:receiver t:*test-suite*) (core:find-service :test-receiver)) - (csys:add-action :sensor #'csys:create-sensor) + (csys:add-action '(:csys :sensor) #'csys:create-sensor) (let ((zero (csys:make-neuron nil :proc #'eff-proc))) - (csys:add-sensors '(:init :zero) (list zero)))) + (csys:add-sensor '(:csys :init :zero) zero))) (deftest test-init () (let ((csys:*environment* (make-instance 'test-env :test-suite t:*test-suite*)))