Reinvent match and rewrite so that they handle sequences of words, not just single words. But make sure they still do work for single words; don't lose any functionality. Examples > (setq A1 (match '(the 1 sat on the 2 quietly) '(the big fluffy cat sat on the bad dog quietly))) > A1 ((2 (BAD DOG)) (1 (BIG FLUFFY CAT))) > (rewrite A1 '(quiet sitter = 1 -- sittee = 2)) (QUIET SITTER = BIG FLUFFY CAT -- SITTEE = BAD DOG) > (setq A2 (match '(1 says I 2) '(Lisa says I look like a parrot))) > A2 ((2 (LOOK LIKE A PARROT)) (1 (LISA))) > (rewrite A2 '(how does it make you feel about 1 when 1 claims you 2 ?)) (HOW DOES IT MAKE YOU FEEL ABOUT LISA WHEN LISA CLAIMS YOU LOOK LIKE A PARROT ?) > (setq A3 (match '(1 says I 2) '(my aunt says that I should learn to knit))) > A3 FAIL It is OK if your match can not handle situations like this (match '(the 1 sat on the 2) '(the man who sat on my dog also sat on the policeman's dog)) even though 1 = (man who sat on my dog also) 2 = (policeman 's dog) is the correct solution. But you should put some thought into how you could make it work properly in cases like that.