Sorry, the macro definition relies on a few additional functions, in particular on the (ice-9 match) and (srfi srfi-1) modules and the following definitions: (define (split-before criterion list) (split-at list (or (list-index criterion list) (length list)))) (define (equals? x) (lambda(y)(equal? x y)))