chibi-scheme/lib/srfi/39/syntax-no-threads.scm

40 lines
1.2 KiB
Scheme

;; param.scm -- SRFI-39 parameters
;; Copyright (c) 2010-2011 Alex Shinn. All rights reserved.
;; BSD-style license: http://synthcode.com/license.txt
(define (parameter-convert param value)
(let ((proc (parameter-converter param)))
(if (procedure? proc)
(proc value)
value)))
(define (make-parameter init . o)
(let ((conv (and (pair? o) (car o))))
(%make-parameter (if conv (conv init) init) conv)))
(define-syntax parameterize
(syntax-rules ()
((parameterize ("step")
((param value p old new) ...)
()
body)
(let ((p param) ...)
(let ((old (p)) ...
(new (parameter-convert p value)) ...)
(dynamic-wind
(lambda () (p new) ...)
(lambda () . body)
(lambda () (p old) ...)))))
((parameterize ("step")
args
((param value) . rest)
body)
(parameterize ("step")
((param value p old new) . args)
rest
body))
((parameterize ((param value) ...) . body)
(parameterize ("step")
()
((param value) ...)
body))))