provide util:mv-bind for use in csys procs; csys: minor clean-ups

This commit is contained in:
Helmut Merz 2026-07-22 11:23:23 +02:00
parent 8cd2b882ee
commit 5b71b0d5e4
4 changed files with 20 additions and 11 deletions

View file

@ -21,12 +21,10 @@
(defclass scope ()
((value :accessor value :initarg :value :initform 0)
;(params :accessor params :initarg :params :initform nil) ; <- program
(categ :accessor categ :initarg :categ :initform '(:csys :c00))
(stage :accessor stage :initarg :stage :initform :initial)
(proc :accessor proc)
(program :reader program :initarg :program)
;(actions :accessor actions :initarg :actions :initform nil) ; <- program
(syns :accessor syns :initform nil)
(environ :reader environ :initarg :environ)))
@ -75,12 +73,18 @@
(defun process (scope)
(lambda (msg) (funcall (proc scope) msg scope)))
(defun std-proc (msg scope)
(defun std-proc (msg scope &key (default #'remember) params actions)
(destructuring-bind (nmsg nscope)
(handle-action msg scope :default #'remember) ; + params, actions
(handle-action msg scope :default default :actions actions :params params)
(forward nmsg (syns nscope))
(update nscope)))
(defun eff-proc (msg scope &key params actions)
(destructuring-bind (nmsg nscope)
(handle-action msg scope :default #'no-op :actions actions :params params)
(notify nmsg nscope)
(update nscope)))
(defun create (msg scope)
(let ((new (neuron (apply #'reset-scope scope (shape:data msg)))))
(notify-created msg new scope)))
@ -97,7 +101,6 @@
(defun handle-action (msg scope &key (default #'no-op) actions params)
(let* ((key (message:action msg))
;(act (gethash key (actions scope) default))
(act (getf actions key (getf actions :default default))))
(apply act msg scope params)))
@ -105,8 +108,7 @@
(let* ((head (list (message:domain msg) :created))
(data (util:plist-merge (shape:data msg) `(:new ,new :parent ,actor:*self*)))
(msg1 (message:create head :data data)))
(notify msg1 scope))
)
(notify msg1 scope)))
;;;; predefined neuron actions
@ -115,5 +117,4 @@
(defun remember (msg scope)
(setf (value scope) (shape:data-value msg :value))
;(list msg (make-neuron-state (shape:data msg) syns))
(list msg scope))

View file

@ -99,6 +99,10 @@
(let ((pl '(:a 0)))
(== (util:plist-add pl :b 1) '(:b 1 :a 0))
(== pl '(:b 1 :a 0)))
(util:mv-bind (a &optional (b :not-set) (c :not-set)) (values 42 2)
(== a 42)
(== b 2)
(== c :not-set))
(util:load-dotenv (t:test-path ".test.env"))
(== (util:getenv "SCOPES_USER") "user-from-env-file")
(== (util:getenv "SCOPES_PASSWORD") "very_secret"))

View file

@ -52,18 +52,18 @@
;;;; test: initialization
(defun setup-test-basic-0 ()
(defun setup-test (prg)
(setup-config)
(core:setup-services)
(let* ((recv (core:find-service :test-receiver))
(env (environ:create #'proc-env t:*test-suite*)))
(setf (tc:receiver t:*test-suite*) recv)
;(csys:create-zero (test-program) env)
(csys:create-zero (csys:make-program #'csys:std-proc) env)
(csys:create-zero prg env)
env))
(deftest test-basic-0 ()
(let ((env (setup-test-basic-0)))
(let ((env (setup-test (csys:make-program #'csys:std-proc))))
(sleep 0.1)
(actor:send env (message:create '(:csys :value :c00 "0-0") :data '(:value 1)))
(sleep 0.1)

View file

@ -11,6 +11,7 @@
#:rfill #:rtrim
#:loop-plist #:filter-plist #:map-plist
#:plist-pairs #:plist-equal #:plist-add #:plist-merge
#:mv-bind
#:flatten-str #:from-keyword #:to-keyword #:to-integer #:to-string
#:from-bytes #:to-bytes #:b64-decode #:b64-encode #:from-b64 #:to-b64
#:absolute-dir #:check-dir #:ensure-dir #:home-path #:path-from-string
@ -97,6 +98,9 @@
(defmacro plist-add (pl k v)
`(setf ,pl (cons ,k (cons ,v ,pl))))
(defmacro mv-bind (vars vform &body body)
`(destructuring-bind ,vars (multiple-value-list ,vform) ,@body))
;;;; strings, symbols, keywords, ...
(defun flatten-str (s &key (sep " "))