From ac44c880af6f280091d4c7279c9522290e8eea0c Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Tue, 28 Jul 2026 09:15:19 +0200 Subject: [PATCH] csys: add negating feedback to zero neuron --- csys/csys.lisp | 5 +++-- test/test-csys.lisp | 21 +++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/csys/csys.lisp b/csys/csys.lisp index f279e99..0e1ce30 100644 --- a/csys/csys.lisp +++ b/csys/csys.lisp @@ -13,7 +13,8 @@ #:neuron #:std-proc #:eff-proc #:create-zero #:handle-action #:notify - #:basic-actions #:no-op #:value-add #:create)) + #:basic-actions #:no-op #:value-add #:create + #:multiply)) (in-package :scopes/csys) @@ -180,7 +181,7 @@ (defun multiply (n) (lambda (msg) - (let* ((data (shape:data (copy-list msg)))) + (let* ((data (copy-list (shape:data msg)))) (setf (getf data :value) (* (getf data :value 0) n)) (message:create (shape:head msg) :data data)))) diff --git a/test/test-csys.lisp b/test/test-csys.lisp index 6e2a2f9..e7609f9 100644 --- a/test/test-csys.lisp +++ b/test/test-csys.lisp @@ -29,8 +29,8 @@ (defun setup-config () (config:add :test-receiver :setup #'tc:setup) - ;(config:add-action '(:csys :effect :c00) (value-in '(1))) - (config:add-action '(:csys :effect) #'tc:check-message) + (config:add-action '(:csys :effect :e01) (value-in '(1 2))) + ;(config:add-action '(:csys :effect) #'tc:check-message) (config:add-action '(:csys) (constantly nil))) (defun proc-env (msg scope) @@ -76,11 +76,15 @@ (defun next-zero-initial () (lambda (msg scope) - (let ((head '(:csys :create :c00 "0-0"))) - (actor:send actor:*self* - (message:create head :data '(:categ (:csys :e01) :connect :succ))) - (actor:send actor:*self* - (message:create head :data '(:addr (:csys :s01 "0-1") :connect :pred))) + (let ((self actor:*self*) + (cr '(:csys :create :c00 "0-0")) + (conn '(:csys :connect :c00 "0-0"))) + (actor:send self + (message:create cr :data '(:categ (:csys :e01) :connect :succ))) + (actor:send self + (message:create cr :data '(:addr (:csys :s01 "0-1") :connect :pred))) + (actor:send self + (message:create conn :data (list :target self :op (csys:multiply -1)))) ;; connect *self* :op (multiply -1) ;; switch :active nil))) @@ -91,7 +95,8 @@ (let ((env (setup-test (prog-b0))) (rcvr (tc:receiver t:*test-suite*))) (sleep 0.1) - (tc:expect rcvr (message:create '(:csys :effect :e01) :data '(:value 1))) + ;(tc:expect rcvr (message:create '(:csys :effect :e01) :data '(:value 1))) (actor:send env (message:create '(:csys :value :s01 "0-1") :data '(:value 1))) + (actor:send env (message:create '(:csys :value :s01 "0-1") :data '(:value 2))) (sleep 0.1) (core:shutdown)))