diff options
author | michele.simionato <devnull@localhost> | 2009-05-05 04:40:29 +0000 |
---|---|---|
committer | michele.simionato <devnull@localhost> | 2009-05-05 04:40:29 +0000 |
commit | f188590543d380845406892027714fa7cc750bd1 (patch) | |
tree | 03fdf9340a4deb68e0452bf391cfdec409bff0f5 /scheme/experimental | |
parent | f840a4130daf07527fb7cc4d334007001559e855 (diff) | |
download | micheles-f188590543d380845406892027714fa7cc750bd1.tar.gz |
My experiments with side-effects and separate compilation
Diffstat (limited to 'scheme/experimental')
-rw-r--r-- | scheme/experimental/define+.sls | 23 | ||||
-rw-r--r-- | scheme/experimental/defines.sls | 11 | ||||
-rw-r--r-- | scheme/experimental/registry.sls | 2 | ||||
-rw-r--r-- | scheme/experimental/use-defines.ss | 5 |
4 files changed, 41 insertions, 0 deletions
diff --git a/scheme/experimental/define+.sls b/scheme/experimental/define+.sls new file mode 100644 index 0000000..2e0b21b --- /dev/null +++ b/scheme/experimental/define+.sls @@ -0,0 +1,23 @@ +#!r6rs +(library (experimental define+) +(export define-registered define+) +(import (rnrs) (for (experimental registry) expand)) + +;; save the content of the expand-time registry into a runtime definition +(define-syntax define-registered + (lambda (x) + (syntax-case x () + ((define-registered names) + #`(define names '#,(registry)))))) + +(define-syntax define+ + (lambda (x) + (syntax-case x () + ((define+ name value) + #'(begin + ;; dirty trick to get an expand time side effect + (define-syntax dummy (begin (register #'name) (lambda (x) #f))) + ;; the real definition + (define name value)))))) + +) diff --git a/scheme/experimental/defines.sls b/scheme/experimental/defines.sls new file mode 100644 index 0000000..4dc65cd --- /dev/null +++ b/scheme/experimental/defines.sls @@ -0,0 +1,11 @@ +#!r6rs +(library (experimental defines) +(export a b visit-defines) +(import (rnrs) (experimental define+)) + +(define-syntax visit-defines + (lambda (x) "visited")) +(define+ a 1) +(define+ b 2) +) + diff --git a/scheme/experimental/registry.sls b/scheme/experimental/registry.sls index c8f06c1..e34c027 100644 --- a/scheme/experimental/registry.sls +++ b/scheme/experimental/registry.sls @@ -12,4 +12,6 @@ (printf "registering ~a\n" id) (set! _registry (append _registry (list id))) _registry) + +(display "registry instantiated\n") ) diff --git a/scheme/experimental/use-defines.ss b/scheme/experimental/use-defines.ss new file mode 100644 index 0000000..7d65148 --- /dev/null +++ b/scheme/experimental/use-defines.ss @@ -0,0 +1,5 @@ +(import (rnrs) (experimental define+) (experimental defines)) +(visit-defines) +(define-registered names) +(display names) +(display (list a b));; just to use the names defined in defines |