() () Tue, 28 Dec 2021 08:19:04 +0100 I /think/ the ellipsis is at a wrong place there. Note that I'm coming from "traditional" match, and I just have wrapped half of my brain around that (which, BTW, is somewhat painful :-) Haha, i know exactly how you feel. So take this with a grain of salt. * Phenomenology (aka: I barely know what I'm doing): If you replace your ellipses above by ". ,rest", things seem to work: (define (unbogus x) (sxml-match x ((a (@ . ,attrs) . ,rest) `(a (@ ,@(delete '(shape "rect") attrs)) . ,rest)))) (unbogus '(a (@ (shape "rect") (href "foo.html")) "kid")) => (a (@ (href "foo.html")) "kid") Cool. I guest the ". ,rest" is a shortcut for the ellipses. * Philosophy (aka blah, blah) If those ellipses resemble what match do, I think they are wrong there: (@ . ,attrs) ... would mean zero or more times the shape "(@ . ,attrs)". I think this isn't what you want. Ah, right! The ellipses are a tail that need to follow a head. I guess i was confused by the documentation's use of ellipses in the conventional sense rather than the literal sense: (define (album->html x) (sxml-match x [(album (@ (title ,t)) (catalog (num ,n) (fmt ,f)) ...) `(ul (li ,t) (li (b ,n) (i ,f)) ...)])) Anyway, thanks to your help, i've managed to cobble together the following code, attached here for the benefit of future self: