summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEli Barzilay <eli@barzilay.org>2013-07-16 04:17:43 -0400
committerEli Barzilay <eli@barzilay.org>2013-07-16 04:17:43 -0400
commitd97565efa1c220790716a14e7eb74365c358bf24 (patch)
treefbd3dea6bd5872db5c508eae602198817e1c85b3
parent0063574a4d574e4c5fe85c65159f760be7009da2 (diff)
Quick bad-macro example.
-rw-r--r--racket.html.markdown10
1 files changed, 9 insertions, 1 deletions
diff --git a/racket.html.markdown b/racket.html.markdown
index eb2bf4c0..e894552c 100644
--- a/racket.html.markdown
+++ b/racket.html.markdown
@@ -353,7 +353,7 @@ m ; => '#hash((b . 2) (a . 1) (c . 3)) <-- no `d'
(for ([i (in-range 5 10)])
(printf "i=~a\n" i)) ; => i=5, i=6, ...
-;;; Other Sequences
+;;; Iteration Over Other Sequences
;; `for' allows iteration over many other kinds of sequences:
;; lists, vectors, strings, sets, hash tables, etc...
@@ -557,6 +557,14 @@ vec ; => #(1 2 3 4)
(swap! a b)
(printf "tmp = ~a; a = ~a; b = ~a\n" tmp a b) ; tmp is unaffected
+;; But the are still code transformations, for example:
+(define-syntax-rule (bad-while condition body ...)
+ (when condition
+ body ...
+ (bad-while condition body ...)))
+;; this macro is broken: it generates infinite code, if you try to use
+;; it, the compiler will get in an infinite loop
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 10. Contracts
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;