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 | |
parent | f840a4130daf07527fb7cc4d334007001559e855 (diff) | |
download | micheles-f188590543d380845406892027714fa7cc750bd1.tar.gz |
My experiments with side-effects and separate compilation
Diffstat (limited to 'scheme')
-rw-r--r-- | scheme/Makefile | 4 | ||||
-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 |
5 files changed, 44 insertions, 1 deletions
diff --git a/scheme/Makefile b/scheme/Makefile index 1a3cd21..4895313 100644 --- a/scheme/Makefile +++ b/scheme/Makefile @@ -1,4 +1,6 @@ upload: - python make_sweet_macros.py + #python make_sweet_macros.py zip -r aps aps/README.txt aps/compat.ikarus.sls aps/compat.ypsilon.sls aps/compat.mzscheme.sls aps/cut.sls aps/easy-test.sls aps/list-utils.sls aps/repeat.sls scp aps.zip micheles@merlin.phyast.pitt.edu:public_html/scheme +experimental.zip: + zip -r experimental experimental/mod?.sls 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 |