1234567891011121314151617181920212223 |
- (define (extract-symbols exp)
- (define (process x out cont)
- (cond ((pair? x)
- (process (car x)
- out
- (lambda (car-x out)
- ;; used to have a bug here whereby `x' was
- ;; modified in the self-tail-recursion to (process
- ;; (cdr x) ...), because we didn't allocate fresh
- ;; externals when doing self-tail-recursion.
- (process (cdr x)
- out
- (lambda (cdr-x out)
- (cont (cons car-x cdr-x)
- out))))))
- ((symbol? x)
- (cont x (cons x out)))
- (else
- (cont x out))))
- (process exp '() (lambda (x out) out)))
- (extract-symbols '(a b . c))
|