chibi-scheme/lib/srfi/39.module
Alex Shinn d451a053ca changed type opcode generators to use type objects, not ids
also fixed support for float/double types
2010-09-17 01:47:21 +00:00

25 lines
1,008 B
Text

(define-module (srfi 39)
(export make-parameter parameterize)
(import-immutable (scheme))
(body
(define (make-parameter value . o)
(if (pair? o)
(let ((converter (car o)))
(lambda args
(if (null? args)
value
(set! value (converter (car args))))))
(lambda args (if (null? args) value (set! value (car args))))))
(define-syntax parameterize
(syntax-rules ()
((parameterize ("step") ((param value tmp1 tmp2) ...) () body)
(let ((tmp1 value) ...)
(let ((tmp2 (param)) ...)
(dynamic-wind (lambda () (param tmp1) ...)
(lambda () . body)
(lambda () (param tmp2) ...)))))
((parameterize ("step") args ((param value) . rest) body)
(parameterize ("step") ((param value tmp1 tmp2) . args) rest body))
((parameterize ((param value) ...) . body)
(parameterize ("step") () ((param value) ...) body))))))