;; © Idiomdrottning, 2022. BSD 1-clause, see COPYING for details. (define (quasiwalk proc tree) ((over (quasiwalk proc x)) tree)) (define (quasiwalk proc (? atom? atom)) (proc atom)) (define (quasiwalk proc ()) '()) (define (quasiwalk proc (and tree ('quote _))) tree) (define (quasiwalk proc (and tree ('quasiquote _))) (quasiwalk 0 proc tree)) (define (quasiwalk softness proc tree) ((over (quasiwalk softness proc x)) tree)) (define (quasiwalk softness proc (? atom? atom)) atom) (define (quasiwalk 0 proc tree) (quasiwalk proc tree)) (define (quasiwalk softness proc ('quasiquote . tree)) (cons 'quasiquote ((over (quasiwalk (add1 softness) proc x)) tree))) (define (quasiwalk softness proc ('unquote . tree)) (cons 'unquote ((over (quasiwalk (sub1 softness) proc x)) tree))) (define (quasiwalk* proc tree) (quasiwalk proc tree) (void))