mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-21 14:49:18 +02:00
adding srfi-39
This commit is contained in:
parent
02e1bb820d
commit
ad068bc1f8
1 changed files with 25 additions and 0 deletions
25
lib/srfi/39.module
Normal file
25
lib/srfi/39.module
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
|
||||||
|
(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))))))
|
Loading…
Add table
Reference in a new issue