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