;; Speicherzellen in CML mit selektiver Kommunikation (define-record-type :cell (really-make-cell ref-channel set!-channel) cell? (ref-channel cell-ref-channel) (set!-channel cell-set!-channel)) (define (make-cell value) (let ((ref-channel (make-channel)) (set!-channel (make-channel))) (spawn (lambda () (let loop ((value value)) (select (list (wrap (send-rv ref-channel value) (lambda (ignore) (loop value))) (wrap (receive-rv set!-channel) loop)))))) (really-make-cell ref-channel set!-channel))) (define (cell-ref cell) (receive (cell-ref-channel cell))) (define (cell-set! cell value) (send (cell-set!-channel cell) value))