WITH n
SELECT
FROM
x: rFAIL => RETURN;
x: rID => RETURN;
x: rWILD => RETURN;
x: rHOLE => RETURN;
x: rUNDEFINED => RETURN;
x: rSTR => RETURN;
x: rCOMB => n ← x.parm;
x: rASS => n ← x.rhs;
x: rLST => {Preorder[x.listhead,p]; n ← x.listtail};
x: rSEQOF => RETURN;
x: rSEQOFC => RETURN;
x: rOPT => RETURN;
x: rDELETE => n ← x.pat;
x: rCAT=> {Preorder[x.left,p]; n ← x.right};
x: rCATL=> {Preorder[x.left,p]; n ← x.right};
x: rGTR=> {Preorder[x.left,p]; n ← x.right};
x: rPALT=> {Preorder[x.left,p]; n ← x.right};
x: rPAPPLY=> {Preorder[x.left,p]; n ← x.right};
x: rMAPPLY=> {Preorder[x.left,p]; n ← x.right};
x: rGOBBLE=> {Preorder[x.left,p]; n ← x.right};
x: rITER=> {Preorder[x.left,p]; n ← x.right};
x: rPROG=> {Preorder[x.left,p]; n ← x.right};
x: rSEQ=> {Preorder[x.left,p]; n ← x.right};
x: rPLUS=> {Preorder[x.left,p]; n ← x.right};
x: rMINUS=> {Preorder[x.left,p]; n ← x.right};
x: rEQUAL=> {Preorder[x.left,p]; n ← x.right};
x: rEQUAL=> {Preorder[x.left,p]; n ← x.right};
x: rTILDE => n ← x.not;
x: rPATTERN => n ← x.pattern;
x: rCLOSURE => n ← x.exp;
x: rFCN=> {Preorder[x.parms,p]; n ← x.fcn};
ENDCASE => P.PBug["Unknown variant"];