From c6292309a404e81d8f038efa56fc83f55f3a7a97 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 3 Mar 2026 14:39:51 +0100 Subject: [PATCH] csys: add detectors registry to environment, for efferent (motoric) neurons --- csys/csys.lisp | 27 ++++++++++++++++++++------- test/test-csys.lisp | 15 +++++++-------- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/csys/csys.lisp b/csys/csys.lisp index 8cbf0d3..856ec34 100644 --- a/csys/csys.lisp +++ b/csys/csys.lisp @@ -10,7 +10,7 @@ (:shape :scopes/shape) (:util :scopes/util) (:alx :alexandria)) - (:export #:environment #:*environment* + (:export #:environment #:*environment* #:detectors #:init #:send #:send-message #:neuron #:synapse @@ -23,16 +23,20 @@ (defclass environment () ((actions :reader actions :initarg :actions :initform (make-hash-table)) (sensors :reader sensors :initarg :sensors - :initform (make-hash-table :test #'equal)))) + :initform (make-hash-table :test #'equal)) + (detectors :reader detectors :initarg :detectors + :initform (make-hash-table :test #'equal)))) (defvar *environment* (make-instance 'environment)) -;;;; sensors: automatically created actors (neuron), addressable via message head - -(defun init (probe) +(defun init (&optional probe) (setf (gethash :sensor (actions *environment*)) #'create-sensor) - (let ((zero (actor:create (neuron #'std-proc 0 (list (synapse probe)))))) - (setf (gethash '(:init :zero) (sensors *environment*)) (list zero)))) + (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)))) + +;;;; sensors: neurons receiving messages from environment, addressable via message head (defun send-message (head data &key customer) (send (message:create head :data data :customer customer))) @@ -49,6 +53,15 @@ ;(util:lgi key sns) sns)) +;;;; detectors: pseudo-neurons in environment, addressabel via message head + +(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)))) + ;;;; neurons (= behavior factories) and synapses (connection factories) (defun neuron (proc &optional state syns (env *environment*)) diff --git a/test/test-csys.lisp b/test/test-csys.lisp index 2d10dbd..d77f5ee 100644 --- a/test/test-csys.lisp +++ b/test/test-csys.lisp @@ -31,8 +31,6 @@ (let ((nst (in-seq val state :remove t))) (csys:update-neuron #'probe nst syns env))))) -(defvar *probe* nil) - (defun add (msg state syns env) (list msg (+ (shape:data msg) state) syns env)) @@ -42,20 +40,21 @@ (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 (actor:create + (csys:neuron #'probe '(1 3 4 5) + nil csys:*environment*)))) (load (t:test-path "config-csys" "etc")) (core:setup-services) (unwind-protect (progn - (test-init)) + (test-init probe)) (sleep 0.1) (async:finish) (t:show-result)))) -(deftest test-init () - (csys:init *probe*) +(deftest test-init (probe) + ;(setf (gethash '(:std :d0) (csys:detectors csys:*environment*)) probe) + (csys:init probe) (csys:send-message '(:csys :sensor :init :zero) '(:std :s1)) (csys:send-message '(:csys :sensor :init :zero) '(:std :s2)) (sleep 0.1)