summaryrefslogtreecommitdiff
path: root/scheme
diff options
context:
space:
mode:
authormichele.simionato <devnull@localhost>2009-05-05 04:40:29 +0000
committermichele.simionato <devnull@localhost>2009-05-05 04:40:29 +0000
commitf188590543d380845406892027714fa7cc750bd1 (patch)
tree03fdf9340a4deb68e0452bf391cfdec409bff0f5 /scheme
parentf840a4130daf07527fb7cc4d334007001559e855 (diff)
downloadmicheles-f188590543d380845406892027714fa7cc750bd1.tar.gz
My experiments with side-effects and separate compilation
Diffstat (limited to 'scheme')
-rw-r--r--scheme/Makefile4
-rw-r--r--scheme/experimental/define+.sls23
-rw-r--r--scheme/experimental/defines.sls11
-rw-r--r--scheme/experimental/registry.sls2
-rw-r--r--scheme/experimental/use-defines.ss5
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