diff --git a/books/bookvol5.pamphlet b/books/bookvol5.pamphlet
index 12de8af..ebff068 100644
--- a/books/bookvol5.pamphlet
+++ b/books/bookvol5.pamphlet
@@ -8381,6 +8381,53 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfCheckMacroOut}{pfCheckMacroOut}
+\calls{pfCheckMacroOut}{pfId?}
+\calls{pfCheckMacroOut}{pfApplication?}
+\calls{pfCheckMacroOut}{pfFlattenApp}
+\calls{pfCheckMacroOut}{pfCheckId}
+\calls{pfCheckMacroOut}{pfCheckArg}
+\calls{pfCheckMacroOut}{npTrapForm}
+<<defun pfCheckMacroOut>>=
+(defun |pfCheckMacroOut| (form)
+ (let (args op ls)
+  (cond
+   ((|pfId?| form) (list form nil))
+   ((|pfApplication?| form)
+    (setq ls (|pfFlattenApp| form))
+    (setq op (|pfCheckId| (car ls)))
+    (setq args (mapcar #'|pfCheckArg| (cdr ls)))
+    (list op args))
+   (t (|npTrapForm| form)))))
+
+@
+
+\defun{pfCheckArg}{pfCheckArg}
+\calls{pfCheckArg}{pfTuple?}
+\calls{pfCheckArg}{pf0TupleParts}
+\calls{pfCheckArg}{pfListOf}
+\calls{pfCheckArg}{pfCheckId}
+<<defun pfCheckArg>>=
+(defun |pfCheckArg| (args)
+ (let (argl)
+  (if (|pfTuple?| args)
+   (setq argl (|pf0TupleParts| args))
+   (setq argl (list args)))
+  (|pfListOf| (mapcar #'|pfCheckId| argl))))
+
+@
+
+\defun{pfCheckId}{pfCheckId}
+\calls{pfCheckId}{pfId?}
+\calls{pfCheckId}{npTrapForm}
+<<defun pfCheckId>>=
+(defun |pfCheckId| (form)
+ (if (null (|pfId?| form))
+  (|npTrapForm| form)
+  form))
+
+@
+
 \defun{pfFlattenApp}{pfFlattenApp}
 \calls{pfFlattenApp}{pfApplication?}
 \calls{pfFlattenApp}{pfCollect1?}
@@ -8434,6 +8481,17 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfPushMacroBody}{pfPushMacroBody}
+\calls{pfPushMacroBody}{pfMLambda}
+\calls{pfPushMacroBody}{pfPushMacroBody}
+<<defun pfPushMacroBody>>=
+(defun |pfPushMacroBody| (args body)
+ (if (null args)
+   body
+   (|pfMLambda| (car args) (|pfPushMacroBody| (cdr args) body))))
+
+@
+
 \defun{pfSourceStok}{pfSourceStok}
 \calls{pfSourceStok}{pfLeaf?}
 \calls{pfSourceStok}{pfParts}
@@ -8822,6 +8880,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfAssign}{Create an Assign node}
+\calls{pfAssign}{pfTree}
+<<defun pfAssign>>=
+(defun |pfAssign| (pflhsitems pfrhs)
+ (|pfTree| '|Assign| (list pflhsitems pfrhs)))
+
+@
+
 \defun{pfAssign?}{Is this an Assign node?}
 \calls{pfAssign?}{pfAbSynOp?}
 <<defun pfAssign?>>=
@@ -8960,6 +9026,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfCollect}{Create a Collect node}
+\calls{pfCollect}{pfTree}
+<<defun pfCollect>>=
+(defun |pfCollect| (pfbody pfiterators)
+ (|pfTree| '|Collect| (list pfbody pfiterators)))
+
+@
+
 \defun{pfCollect?}{Is this a Collect node?}
 \calls{pfCollect?}{pfAbSynOp?}
 <<defun pfCollect?>>=
@@ -9007,6 +9081,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfDo}{Create a Do node}
+\calls{pfDo}{pfTree}
+<<defun pfDo>>=
+(defun |pfDo| (pfbody)
+ (|pfTree| '|Do| (list pfbody)))
+
+@
+
 \defun{pfDo?}{Is this a Do node?}
 \calls{pfDo?}{pfAbSynOp?}
 <<defun pfDo?>>=
@@ -9271,6 +9353,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfImport}{Construct an Import node}
+\calls{pfImport}{pfTree}
+<<defun pfImport>>=
+(defun |pfImport| (pfitems)
+ (|pfTree| '|Import| (list pfitems)))
+
+@
+
 \defun{pfIterate}{Construct an Iterate node}
 \calls{pfIterate}{pfTree}
 <<defun pfIterate>>=
@@ -9376,6 +9466,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfLocal}{Construct a Local node}
+\calls{pfLocal}{pfTree}
+<<defun pfLocal>>=
+(defun |pfLocal| (pfitems)
+ (|pfTree| '|Local| (list pfitems)))
+
+@
+
 \defun{pfLocal?}{Is this a Local node?}
 \calls{pfLocal?}{pfAbSynOp?}
 <<defun pfLocal?>>=
@@ -9400,6 +9498,24 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfLoop}{Construct a Loop node}
+\calls{pfLoop}{pfTree}
+<<defun pfLoop>>=
+(defun |pfLoop| (pfiterators)
+ (|pfTree| '|Loop| (list pfiterators)))
+
+@
+
+\defun{pfLoop1}{pfLoop1}
+\calls{pfLoop1}{pfLoop}
+\calls{pfLoop1}{pfListOf}
+\calls{pfLoop1}{pfDo}
+<<defun pfLoop1>>=
+(defun |pfLoop1| (body)
+ (|pfLoop| (|pfListOf| (list (|pfDo| body)))))
+
+@
+
 \defun{pfLoop?}{Is this a Loop node?}
 \calls{pfLoop?}{pfAbSynOp?}
 <<defun pfLoop?>>=
@@ -9424,6 +9540,24 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfLp}{pfLp}
+\calls{pfLp}{pfLoop}
+\calls{pfLp}{pfListOf}
+\calls{pfLp}{pfDo}
+<<defun pfLp>>=
+(defun |pfLp| (iterators body)
+ (|pfLoop| (|pfListOf| (append iterators (list (|pfDo| body))))))
+
+@
+
+\defun{pfMacro}{Create a Macro node}
+\calls{pfMacro}{pfTree}
+<<defun pfMacro>>=
+(defun |pfMacro| (pflhs pfrhs)
+ (|pfTree| '|Macro| (list pflhs pfrhs)))
+
+@
+
 \defun{pfMacro?}{Is this a Macro node?}
 \calls{pfMacro?}{pfAbSynOp?}
 <<defun pfMacro?>>=
@@ -9432,6 +9566,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfMLambda}{Construct an MLambda node}
+\calls{pfMLambda}{pfTree}
+<<defun pfMLambda>>=
+(defun |pfMLambda| (pfargs pfbody)
+ (|pfTree| '|MLambda| (list pfargs pfbody)))
+
+@
+
 \defun{pfMLambda?}{Is this an MLambda node?}
 \calls{pfMLambda?}{pfAbSynOp?}
 <<defun pfMLambda?>>=
@@ -9700,6 +9842,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfSuchthat}{Create a Suchthat node}
+\calls{pfSuchthat}{pfTree}
+<<defun pfSuchthat>>=
+(defun |pfSuchthat| (pfcond)
+ (|pfTree| '|Suchthat| (list pfcond)))
+
+@
+
 \defun{pfSuchthat?}{Is this a SuchThat node?}
 \calls{pfSuchthat?}{pfAbSynOp?}
 <<defun pfSuchthat?>>=
@@ -9818,6 +9968,14 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfTyping}{Construct a Typing node}
+\calls{pfTyping}{pfTree}
+<<defun pfTyping>>=
+(defun |pfTyping| (pfitems)
+ (|pfTree| '|Typing| (list pfitems)))
+
+@
+
 \defun{pfTuple}{Return a Tuple node}
 \calls{pfTuple}{pfTree}
 <<defun pfTuple>>=
@@ -9872,6 +10030,23 @@ of the form ('expression expr position)
 
 @
 
+\defun{pfWDec}{The comment is attached to all signatutres}
+\calls{pfWDec}{pfWDeclare}
+\calls{pfWDec}{pfParts}
+<<defun pfWDec>>=
+(defun |pfWDec| (doc name)
+ (mapcar #'(lambda (i) (|pfWDeclare| i doc)) (|pfParts| name)))
+
+@
+
+\defun{pfWDeclare}{Construct a WDeclare node}
+\calls{pfWDeclare}{pfTree}
+<<defun pfWDeclare>>=
+(defun |pfWDeclare| (pfsignature pfdoc)
+ (|pfTree| '|WDeclare| (list pfsignature pfdoc)))
+
+@
+
 \defun{pfWhere}{Construct a Where node}
 \calls{pfWhere}{pfTree}
 <<defun pfWhere>>=
@@ -38895,6 +39070,7 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfApplicationOp>>
 <<defun pfApplication?>>
 <<defun pfApplication2Sex>>
+<<defun pfAssign>>
 <<defun pfAssign?>>
 <<defun pfAssignLhsItems>>
 <<defun pfAssignRhs>>
@@ -38906,11 +39082,15 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfBreak>>
 <<defun pfBreak?>>
 <<defun pfBreakFrom>>
+<<defun pfCheckArg>>
+<<defun pfCheckMacroOut>>
+<<defun pfCheckId>>
 <<defun pfCheckItOut>>
 <<defun pfCoerceto>>
 <<defun pfCoerceto?>>
 <<defun pfCoercetoExpr>>
 <<defun pfCoercetoType>>
+<<defun pfCollect>>
 <<defun pfCollect?>>
 <<defun pfCollect1?>>
 <<defun pfCollectArgTran>>
@@ -38923,6 +39103,7 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfDefinitionRhs>>
 <<defun pfDefinition?>>
 <<defun pfDefinition2Sex>>
+<<defun pfDo>>
 <<defun pfDo?>>
 <<defun pfDoBody>>
 <<defun pfDocument>>
@@ -38960,6 +39141,7 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfIfElse>>
 <<defun pfIfThen>>
 <<defun pfIfThenOnly>>
+<<defun pfImport>>
 <<defun pfInline>>
 <<defun pfInfApplication>>
 <<defun pfIterate>>
@@ -38981,11 +39163,17 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfLiteralClass>>
 <<defun pfLiteralString>>
 <<defun pfLiteral2Sex>>
+<<defun pfLocal>>
 <<defun pfLocalItems>>
 <<defun pfLocal?>>
 <<defun pfLoopIterators>>
+<<defun pfLoop>>
+<<defun pfLoop1>>
 <<defun pfLoop?>>
+<<defun pfLp>>
+<<defun pfMacro>>
 <<defun pfMacro?>>
+<<defun pfMLambda>>
 <<defun pfMLambda?>>
 <<defun pfname>>
 <<defun pfNoPosition>>
@@ -39010,6 +39198,7 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfPretendExpr>>
 <<defun pfPretendType>>
 <<defun pfPushBody>>
+<<defun pfPushMacroBody>>
 <<defun pfQualType>>
 <<defun pfRestrict>>
 <<defun pfRestrict?>>
@@ -39039,6 +39228,7 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfSourceStok>>
 <<defun pfSpread>>
 <<defun pfSuch>>
+<<defun pfSuchthat>>
 <<defun pfSuchthat?>>
 <<defun pfSuchthatCond>>
 <<defun pfSuchThat2Sex>>
@@ -39061,9 +39251,12 @@ This needs to work off the internal exposure list, not the file.
 <<defun pfTyped?>>
 <<defun pfTypedId>>
 <<defun pfTypedType>>
+<<defun pfTyping>>
 <<defun pfTupleParts>>
 <<defun pfTuple?>>
 <<defun pfUnSequence>>
+<<defun pfWDec>>
+<<defun pfWDeclare>>
 <<defun pfWhere>>
 <<defun pfWhere?>>
 <<defun pfWhereContext>>
diff --git a/changelog b/changelog
index 9e5db47..93407c1 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20100223 tpd src/axiom-website/patches.html 20100223.01.tpd.patch
+20100223 tpd src/interp/ptrees.lisp removed
+20100223 tpd src/interp/macex.lisp merge and remove ptrees.lisp
+20100223 tpd src/interp/Makefile remove ptrees
+20100223 tpd books/bookvol5 merge and remove ptrees.lisp
 20100222 tpd src/axiom-website/patches.html 20100222.04.tpd.patch
 20100222 tpd src/input/pmint.input add comments
 20100222 tpd src/axiom-website/patches.html 20100222.03.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index df660b4..2939bb8 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2491,5 +2491,7 @@ src/input/unittest2.input fix broken credit test<br/>
 books/bookvol5 merge and remove cparse, treeshake ptrees<br/>
 <a href="patches/20100222.04.tpd.patch">20100222.04.tpd.patch</a>
 src/input/pmint.input add comments<br/>
+<a href="patches/20100223.01.tpd.patch">20100223.01.tpd.patch</a>
+books/bookvol5 merge and remove ptrees.lisp<br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 10f3081..92d7608 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -169,7 +169,7 @@ OBJS= ${OUT}/vmlisp.${O}      \
       ${OUT}/nrungo.${O}      ${OUT}/nrunopt.${O} \
       ${OUT}/nruntime.${O}    \
       ${OUT}/posit.${O}       \
-      ${OUT}/ptrees.${O}      ${OUT}/ptrop.${O} \
+      ${OUT}/ptrop.${O} \
       ${OUT}/record.${O}      ${OUT}/regress.${O} \
       ${OUT}/rulesets.${O} \
       ${OUT}/server.${O}    \
@@ -3157,29 +3157,6 @@ ${MID}/macex.lisp: ${IN}/macex.lisp.pamphlet
 
 @
 
-\subsection{ptrees.lisp}
-<<ptrees.o (OUT from MID)>>=
-${OUT}/ptrees.${O}: ${MID}/ptrees.lisp
-	@ echo 136 making ${OUT}/ptrees.${O} from ${MID}/ptrees.lisp
-	@ ( cd ${MID} ; \
-	  if [ -z "${NOISE}" ] ; then \
-	   echo '(progn  (compile-file "${MID}/ptrees.lisp"' \
-             ':output-file "${OUT}/ptrees.${O}") (${BYE}))' | ${DEPSYS} ; \
-	  else \
-	   echo '(progn  (compile-file "${MID}/ptrees.lisp"' \
-             ':output-file "${OUT}/ptrees.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-	  fi )
-
-@
-<<ptrees.lisp (MID from IN)>>=
-${MID}/ptrees.lisp: ${IN}/ptrees.lisp.pamphlet
-	@ echo 137 making ${MID}/ptrees.lisp from ${IN}/ptrees.lisp.pamphlet
-	@ (cd ${MID} ; \
-	   ${TANGLE} ${IN}/ptrees.lisp.pamphlet >ptrees.lisp )
-
-@
-
 \subsection{ptrop.lisp}
 <<ptrop.o (OUT from MID)>>=
 ${OUT}/ptrop.${O}: ${MID}/ptrop.lisp
@@ -3877,9 +3854,6 @@ clean:
 <<pspad2.o (AUTO from MID)>>
 <<pspad2.lisp (MID from IN)>>
 
-<<ptrees.o (OUT from MID)>>
-<<ptrees.lisp (MID from IN)>>
-
 <<ptrop.o (OUT from MID)>>
 <<ptrop.lisp (MID from IN)>>
 
diff --git a/src/interp/macex.lisp.pamphlet b/src/interp/macex.lisp.pamphlet
index b3a7216..1d12887 100644
--- a/src/interp/macex.lisp.pamphlet
+++ b/src/interp/macex.lisp.pamphlet
@@ -100,6 +100,14 @@
 ;        [[pfIdSymbol par ,:pfLeaf( pfAbSynOp par,GENSYM(),pfLeafPosition par)] for par in parlist ]
 ;    for p in pfParts pform repeat macLambdaParameterHandling( replist , p )
 
+(DEFUN |pf0MLambdaArgs| (|pf|)
+  (PROG () (RETURN (|pfParts| (|pfMLambdaArgs| |pf|)))))
+
+(DEFUN |pfMLambdaArgs| (|pf|) (PROG () (RETURN (CADR |pf|))))
+
+(DEFUN |pfLeafPosition| (|form|)
+  (PROG () (RETURN (|tokPosn| |form|))))
+
 (DEFUN |macLambdaParameterHandling| (|replist| |pform|)
   (PROG (|parlist|)
     (RETURN
@@ -252,6 +260,10 @@
 ; 
 ;    if pfNothing? rhs then pf else pfMacro(lhs, pfNothing())
 
+(DEFUN |pfMacroRhs| (|pf|) (PROG () (RETURN (CADDR |pf|))))
+
+(DEFUN |pfMacroLhs| (|pf|) (PROG () (RETURN (CADR |pf|))))
+
 (DEFUN |macMacro| (|pf|)
   (PROG (|sy| |rhs| |lhs|)
     (RETURN
@@ -303,6 +315,8 @@
 ;        EQ(bd, body) => name := [sy,st]
 ;    name
 
+(DEFUN |pfMLambdaBody| (|pf|) (PROG () (RETURN (CADDR |pf|))))
+
 (DEFUN |mac0GetName| (|body|)
   (PROG (|bd| |ISTMP#2| |st| |ISTMP#1| |sy| |name|)
     (DECLARE (SPECIAL |$pfMacros|))
diff --git a/src/interp/ptrees.lisp.pamphlet b/src/interp/ptrees.lisp.pamphlet
deleted file mode 100644
index 290c60a..0000000
--- a/src/interp/ptrees.lisp.pamphlet
+++ /dev/null
@@ -1,289 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp ptrees.lisp}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-<<*>>=
-(in-package "BOOT")
-
-;pfLeafPosition form == tokPosn form
-
-(DEFUN |pfLeafPosition| (|form|)
-  (PROG () (RETURN (|tokPosn| |form|))))
-
-;--% LEAVES
-
-;--% TREES
-;-- parser interface functions
-;-- these are potential sources of trouble in macro expansion
-;
-;-- the comment is attached to all signatutres
-;pfWDec(doc,name)   == [pfWDeclare(i,doc) for i in pfParts name]
-
-(DEFUN |pfWDec| (|doc| |name|)
-  (PROG ()
-    (RETURN
-      ((LAMBDA (|bfVar#2| |bfVar#1| |i|)
-         (LOOP
-           (COND
-             ((OR (ATOM |bfVar#1|)
-                  (PROGN (SETQ |i| (CAR |bfVar#1|)) NIL))
-              (RETURN (NREVERSE |bfVar#2|)))
-             ('T
-              (SETQ |bfVar#2|
-                    (CONS (|pfWDeclare| |i| |doc|) |bfVar#2|))))
-           (SETQ |bfVar#1| (CDR |bfVar#1|))))
-       NIL (|pfParts| |name|) NIL))))
-
-;pfLp(iterators,body)==
-;       pfLoop pfListOf [:iterators,pfDo body]
-
-(DEFUN |pfLp| (|iterators| |body|)
-  (PROG ()
-    (RETURN
-      (|pfLoop|
-          (|pfListOf| (APPEND |iterators| (CONS (|pfDo| |body|) NIL)))))))
-
-;pfLoop1 body == pfLoop pfListOf [pfDo body]
-
-(DEFUN |pfLoop1| (|body|)
-  (PROG () (RETURN (|pfLoop| (|pfListOf| (LIST (|pfDo| |body|)))))))
-
-;--The rest have been generated from ABCUT INPUT
-;-- 1/31/89
-;
-;
-;--              Add         / Application  / Assign /
-;--              Coerceto    / Collect      / ComDefinition  / DeclPart /
-;--              Exit        / Export       / Free /
-;--              Fromdom     / Id           / If            / Inline /
-;--              Iterate     / Lambda /
-;--              Break       / Literal      / Local         / Loop   /
-;--              MLambda     / Pretend      / Restrict    / Return /
-;--              Sequence    / Tagged       / Tuple         / Typing /
-;--              Where       / With
-
-;pfExpr? pf ==
-;     pfAdd? pf or _
-;     pfApplication? pf or _
-;     pfAssign? pf or _
-;     pfCoerceto? pf or _
-;     pfCollect? pf or _
-;     pfComDefinition? pf or _
-;     pfDeclPart? pf or _
-;     pfExit? pf or _
-;     pfExport? pf or _
-;     pfFree? pf or _
-;     pfFromdom? pf or _
-;     pfId? pf or _
-;     pfIf? pf or _
-;     pfInline? pf or _
-;     pfIterate? pf or _
-;     pfLambda? pf or _
-;     pfBreak? pf or _
-;     pfLiteral? pf or _
-;     pfLocal? pf or _
-;     pfLoop? pf or _
-;     pfMLambda? pf or _
-;     pfPretend? pf or _
-;     pfRestrict? pf or _
-;     pfReturn? pf or _
-;     pfSequence? pf or _
-;     pfTagged? pf or _
-;     pfTuple? pf or _
-;     pfTyping? pf or _
-;     pfWhere? pf or _
-;     pfWith? pf
-
-;-- WDeclare    := (Signature: Typed, Doc: ? Document)
-
-;pfWDeclare(pfsignature, pfdoc) == pfTree('WDeclare, [pfsignature, pfdoc])
-
-(DEFUN |pfWDeclare| (|pfsignature| |pfdoc|)
-  (PROG ()
-    (RETURN (|pfTree| '|WDeclare| (LIST |pfsignature| |pfdoc|)))))
-
-;-- MLambda     := (Args: [Id], Body: Expr)
-
-;pfMLambda(pfargs, pfbody) == pfTree('MLambda, [pfargs, pfbody])
-
-(DEFUN |pfMLambda| (|pfargs| |pfbody|)
-  (PROG () (RETURN (|pfTree| '|MLambda| (LIST |pfargs| |pfbody|)))))
-
-;pfMLambdaArgs pf == CADR pf       -- was ==>
-
-(DEFUN |pfMLambdaArgs| (|pf|) (PROG () (RETURN (CADR |pf|))))
-
-;pfMLambdaBody pf == CADDR pf       -- was ==>
-
-(DEFUN |pfMLambdaBody| (|pf|) (PROG () (RETURN (CADDR |pf|))))
-
-;pf0MLambdaArgs pf == pfParts pfMLambdaArgs pf
-
-(DEFUN |pf0MLambdaArgs| (|pf|)
-  (PROG () (RETURN (|pfParts| (|pfMLambdaArgs| |pf|)))))
-
-;-- Loop        := (Iterators: [Iterator])
-
-;pfLoop(pfiterators) == pfTree('Loop, [pfiterators])
-
-(DEFUN |pfLoop| (|pfiterators|)
-  (PROG () (RETURN (|pfTree| '|Loop| (LIST |pfiterators|)))))
-
-;-- Collect     := (Body: Expr, Iterators: [Iterator])
-
-;pfCollect(pfbody, pfiterators) == pfTree('Collect, [pfbody, pfiterators])
-
-(DEFUN |pfCollect| (|pfbody| |pfiterators|)
-  (PROG ()
-    (RETURN (|pfTree| '|Collect| (LIST |pfbody| |pfiterators|)))))
-
-;-- Suchthat    := (Cond: Expr)
-
-;pfSuchthat(pfcond) == pfTree('Suchthat, [pfcond])
-
-(DEFUN |pfSuchthat| (|pfcond|)
-  (PROG () (RETURN (|pfTree| '|Suchthat| (LIST |pfcond|)))))
-
-;-- Do          := (Body: Expr)
-
-;pfDo(pfbody) == pfTree('Do, [pfbody])
-
-(DEFUN |pfDo| (|pfbody|)
-  (PROG () (RETURN (|pfTree| '|Do| (LIST |pfbody|)))))
-
-;-- Macro       := (Lhs:  Id,     Rhs: ExprorNot)
-
-;pfMacro(pflhs, pfrhs) == pfTree('Macro, [pflhs, pfrhs])
-
-(DEFUN |pfMacro| (|pflhs| |pfrhs|)
-  (PROG () (RETURN (|pfTree| '|Macro| (LIST |pflhs| |pfrhs|)))))
-
-;pfMacroLhs pf == CADR pf       -- was ==>
-
-(DEFUN |pfMacroLhs| (|pf|) (PROG () (RETURN (CADR |pf|))))
-
-;pfMacroRhs pf == CADDR pf       -- was ==>
-
-(DEFUN |pfMacroRhs| (|pf|) (PROG () (RETURN (CADDR |pf|))))
-
-;-- Assign      := (LhsItems:  [AssLhs], Rhs:  Expr)
-;
-;pfAssign(pflhsitems, pfrhs) == pfTree('Assign, [pflhsitems, pfrhs])
-
-(DEFUN |pfAssign| (|pflhsitems| |pfrhs|)
-  (PROG () (RETURN (|pfTree| '|Assign| (LIST |pflhsitems| |pfrhs|)))))
-
-;-- Typing      := (Items: [Typed])
-
-;pfTyping(pfitems) == pfTree('Typing, [pfitems])
-
-(DEFUN |pfTyping| (|pfitems|)
-  (PROG () (RETURN (|pfTree| '|Typing| (LIST |pfitems|)))))
-
-;-- Local       := (Items: [Typed])
-
-;pfLocal(pfitems) == pfTree('Local, [pfitems])
-
-(DEFUN |pfLocal| (|pfitems|)
-  (PROG () (RETURN (|pfTree| '|Local| (LIST |pfitems|)))))
-
-;-- Import      := (Items: [QualType])
-
-;pfImport(pfitems) == pfTree('Import, [pfitems])
-
-(DEFUN |pfImport| (|pfitems|)
-  (PROG () (RETURN (|pfTree| '|Import| (LIST |pfitems|)))))
-
-;pfCheckMacroOut form ==
-;  pfId? form => [form,nil]
-;  pfApplication? form =>
-;          ls:=pfFlattenApp form
-;          op:= pfCheckId first ls
-;          args:=[pfCheckArg i for i in rest ls]
-;          [op,args]
-;  npTrapForm form
-
-(DEFUN |pfCheckMacroOut| (|form|)
-  (PROG (|args| |op| |ls|)
-    (RETURN
-      (COND
-        ((|pfId?| |form|) (LIST |form| NIL))
-        ((|pfApplication?| |form|)
-         (PROGN
-           (SETQ |ls| (|pfFlattenApp| |form|))
-           (SETQ |op| (|pfCheckId| (CAR |ls|)))
-           (SETQ |args|
-                 ((LAMBDA (|bfVar#12| |bfVar#11| |i|)
-                    (LOOP
-                      (COND
-                        ((OR (ATOM |bfVar#11|)
-                             (PROGN (SETQ |i| (CAR |bfVar#11|)) NIL))
-                         (RETURN (NREVERSE |bfVar#12|)))
-                        ('T
-                         (SETQ |bfVar#12|
-                               (CONS (|pfCheckArg| |i|) |bfVar#12|))))
-                      (SETQ |bfVar#11| (CDR |bfVar#11|))))
-                  NIL (CDR |ls|) NIL))
-           (LIST |op| |args|)))
-        ('T (|npTrapForm| |form|))))))
-
-;pfCheckArg args==
-;          argl:= if pfTuple? args then pf0TupleParts args else [args]
-;          pfListOf [pfCheckId i for i in argl]
-
-(DEFUN |pfCheckArg| (|args|)
-  (PROG (|argl|)
-    (RETURN
-      (PROGN
-        (SETQ |argl|
-              (COND
-                ((|pfTuple?| |args|) (|pf0TupleParts| |args|))
-                ('T (LIST |args|))))
-        (|pfListOf|
-            ((LAMBDA (|bfVar#14| |bfVar#13| |i|)
-               (LOOP
-                 (COND
-                   ((OR (ATOM |bfVar#13|)
-                        (PROGN (SETQ |i| (CAR |bfVar#13|)) NIL))
-                    (RETURN (NREVERSE |bfVar#14|)))
-                   ('T
-                    (SETQ |bfVar#14|
-                          (CONS (|pfCheckId| |i|) |bfVar#14|))))
-                 (SETQ |bfVar#13| (CDR |bfVar#13|))))
-             NIL |argl| NIL))))))
-
-;pfCheckId form==   if not pfId? form then npTrapForm(form) else form
-
-(DEFUN |pfCheckId| (|form|)
-  (PROG ()
-    (RETURN
-      (COND
-        ((NULL (|pfId?| |form|)) (|npTrapForm| |form|))
-        ('T |form|)))))
-
-;pfPushMacroBody(args,body)==
-;    null args =>   body
-;    pfMLambda(first args,pfPushMacroBody(rest args,body))
-
-(DEFUN |pfPushMacroBody| (|args| |body|)
-  (PROG ()
-    (RETURN
-      (COND
-        ((NULL |args|) |body|)
-        ('T
-         (|pfMLambda| (CAR |args|)
-             (|pfPushMacroBody| (CDR |args|) |body|)))))))
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
