;;;; cl-scopes/csys/program - common and general csys program definitions (defpackage :scopes/csys/program (:use :common-lisp) (:local-nicknames (:actor :scopes/core/actor) (:csys :scopes/csys) (:environ :scopes/csys/environ) (:util :scopes/util)) (:export #:basic-0 #:basic-1)) (in-package :scopes/csys/program) ;;;; basic-0: minimal recursive system (defun basic-0 () (csys:make-program (list '(:c00 :initial) (csys:std-proc :actions (b0-actions-zero-initial)) '(:e01 :initial) (csys:eff-proc :actions (csys:basic-actions)) ':default (csys:std-proc :actions (csys:basic-actions))))) (defun b0-actions-zero-initial () (util:plist-merge (csys:basic-actions) (list :next (b0-next-zero-initial)))) (defun b0-next-zero-initial () (lambda (msg scope) (let ((self actor:*self*)) (csys:send-create self :cat :e01 :connect :succ) (csys:send-create self :cat :s01 :loc "0-1" :connect :pred) (csys:send-connect self self :op (csys:multiply -1)) ;; switch :active nil))) ;;;; basic-1: minimal cross-linked system (defun basic-1 () (csys:make-program (list '(:s00 :initial) (csys:std-proc :actions (b1-zero-actions-initial)) '(:s00 :basic) (csys:std-proc :actions (b1-one-actions-basic)) '(:e00 :default) (csys:eff-proc :actions (csys:basic-actions)) ':default (csys:std-proc :actions (csys:basic-actions))))) (defun b1-zero-actions-initial () (util:plist-merge (csys:basic-actions) (list :next (b1-next-zero-initial)))) (defun b1-next-zero-initial () (lambda (msg scope) (let ((self actor:*self*)) (csys:send-create self :cat :e00 :loc "1-0" :connect :succ) (csys:send-create self :cat :e00 :loc "1-1" :connect :succ :op (csys:multiply -1)) (csys:send-create self :cat :s00 :stage :basic :loc "0-1") ;; switch :active nil))) (defun b1-one-actions-basic () (util:plist-merge (csys:basic-actions) (list :next (b1-next-one-basic)))) (defun b1-next-one-basic () (lambda (msg scope) (let ((self actor:*self*) (env (csys:environ scope))) (environ:send-connect env :to self :target '(:csys :e00 "1-0") :op (csys:multiply -1)) (environ:send-connect env :to self :target '(:csys :e00 "1-1")) ;; switch :active nil)))