(Arne Babenhauserheide)
2016-10-09: try to use a procedure in a syntax definition. three-witches-space-in-name try to use a procedure in a syntax definition.
diff --git a/examples/enter-three-witches.w b/examples/enter-three-witches.w
--- a/examples/enter-three-witches.w
+++ b/examples/enter-three-witches.w
@@ -60,6 +60,34 @@ define-syntax Speak
: _ (((name :::))) symbol :::
begin #t symbol :::
+
+define : longest-common-prefix-in introduced-names li
+ . "Get the name with the longest common prefix with list li"
+ let loop
+ : names introduced-names
+ longest '()
+ if : null? names
+ . longest
+ let lp
+ : prefix '()
+ name : car names
+ l : li
+ if
+ or
+ null? name
+ null? l
+ not : equal? (car name) (car l)
+ loop
+ cdr names
+ if (> (length prefix) (length longest))
+ . prefix
+ . longest
+ lp
+ cons (car name) prefix
+ cdr name
+ cdr l
+
+
define-syntax Enter
lambda (x)
syntax-case x ()
@@ -81,11 +109,10 @@ define-syntax Enter
; syntax-error
; . "Name not introduced:" name more ...
: _ symbol ::: ; FIXME: This prevents checking at compiletime :(
- with-syntax ((oldname (datum->syntax y 'name)))
; FIXME: this does not correctly make the second name
; part of the name, preventing differentiation between
; name and modifier
- #` Speak (((oldname))) symbol :::
+ #` Speak (((name))) symbol :::
;; process the rest of the names
Enter b ...
;; record that the name was introduced. I do not see a way to do