-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathreplacestar.scm
31 lines (30 loc) · 878 Bytes
/
replacestar.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(define replace*
(lambda (al x)
(cond
[(null? x) '()]
[(symbol? x)
(cond
[(assq x al) => cdr]
[else x])]
[(pair? x)
(cons (replace* al (car x))
(replace* al (cdr x)))]
[(boolean? x) x]
[(string? x) x]
[else (error 'replace* (format "unknown expression type: ~a\n" x))])))
(define replace-respect-quote*
(lambda (al x)
(cond
[(null? x) '()]
[(symbol? x)
(cond
[(assq x al) => cdr]
[else x])]
[(pair? x)
(if (eq? (car x) 'quote)
x
(cons (replace-respect-quote* al (car x))
(replace-respect-quote* al (cdr x))))]
[(boolean? x) x]
[(string? x) x]
[else (error 'replace-respect-quote* (format "unknown expression type: ~a\n" x))])))