\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{defpattern}[1994/10/12] \message{% `\string\defpattern-macro (adapted from \string\howto\space (A. Jeffrey: TeX and TUG NEWS 2(2)))'% } %define a macro \defpattern for defining ML-like pattern matching macros %adapted from the \howto-macro from tugboat \def\xcs#1#2{\expandafter#1\csname#2\endcsname} \newcount\actioncount \def\defpattern#1[#2]#3{% \xcs\ifx{\expandafter\gobble\string#1}\relax% \def#1{\erroraction#1}\fi% \advance\actioncount by 1\relax% \expandafter\defaction\expandafter{#1}{#3}{#2}% \def\temp##1##2##3##4##5##6##7##8##9{\def\temp{[#2]}}% \temp\empty\empty\empty\empty\empty\empty\empty\empty\empty% \edef#1{\noexpand\doaction\xcs\noexpand% {action-\the\actioncount}\temp}} \def\defaction#1#2#3{% \xcs\def{action-\the\actioncount}##1[#3]{\applyto{#1}{#2}}} \def\gobble#1{} \def\applyto#1#2#3{#3{#1}{#2}} \def\doaction#1[#2][#3]{#1[#3]\success[#2]\failure[#3]} \def\success#1#2[#3]\failure[#4]{#2} \def\failure#1#2{#1} \def\erroraction#1[#2]{% \errmessage{I don't know how to \string#1[#2]}}