A limited anaphoric lambda implemented with syntax-rules.
Examples:
(append-map (& list u u) '(a b c d))
===>
(a a b b c c d d)
((& / v (+ u u)) 2 88)
===>
22
(map (& string-append u (symbol->string v))
'("foo" "back")
'(bar track))
===>
("foobar" "backtrack")
(for-each
(& print (string-append u "-" v "-" w))
'("tick" "nick")
'("tock" "knock")
'("tack" "knack"))
===>
tick-tock-tack
nick-knock-knack
A limited anaphoric lambda implemented with syntax-rules.
Examples:
(append-map (& list u u) '(a b c d))
===>
(a a b b c c d d)
((& / v (+ u u)) 2 88)
===>
22
(map (& string-append u (symbol->string v))
'("foo" "back")
'(bar track))
===>
("foobar" "backtrack")
(for-each
(& print (string-append u "-" v "-" w))
'("tick" "nick")
'("tock" "knock")
'("tack" "knack"))
===>
tick-tock-tack
nick-knock-knack
I'm not a macro guru, so this can probably be improved.
(define-syntax &-aux
(syntax-rules (u v w quote)
[(_ whole shadow (param ...) () original)
(lambda (param ...) original)]
[(_ (u more ...) (x y ...) () ps original)
(&-aux (more ...) (y ...) (x) ps original)]
[(_ (v more ...) (x y ...) (a) ps original)
(&-aux (more ...) (y ...) (a x) ps original)]
[(_ (w more ...) (x y ...) (a b) ps original)
(&-aux (more ...) (y ...) (a b x) ps original)]
[(_ ((quote ...) more ...) (y z ...) params ps original)
(&-aux (more ...) (z ...) params ps original)]
[(_ ('x more ...) (y z ...) params ps original)
(&-aux (more ...) (z ...) params ps original)]
[(_ ((s ...) more ...) (y z ...) params ps original)
(&-aux (s ... more ...) (s ... z ...) params ps original)]
[(_ (x more ...) (y z ...) params ps original)
(&-aux (more ...) (z ...) params ps original)]
[(_ () shadow params (p ps ...) original)
(&-aux original original params (ps ...) original)]))
;; Lambda with anaphoric parameters u, v, and w.
(define-syntax &
(syntax-rules ()
[(& x ...)
(&-aux (x ...) (x ...) () (1 2 3) (x ...))]))
Sysop: | Keyop |
---|---|
Location: | Huddersfield, West Yorkshire, UK |
Users: | 429 |
Nodes: | 16 (2 / 14) |
Uptime: | 112:15:32 |
Calls: | 9,055 |
Calls today: | 2 |
Files: | 13,395 |
Messages: | 6,016,192 |