Just have to write the recursive rule matcher and infix parser until my core functionality is complete!
Then I’ll go on to extend the reduction system to also destruct non list structures, so I can define rules as such:
(swap [a b]) = [b, a]
Or a more advanced example, defining a complete map function purely using rewriting rules.
(map x ) =  (map x [f]) = [(x f)] (map x [f & rest]) = (conj (map x rest) (x f))
Which will be pretty awesome.
So far I have macros for building a rewriting system, defining a named rewriting system, rules processing, variable & constant definitions, and parser definition - without an infix parsing implementation.