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| (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| (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| (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| (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| (pflhsitems pfrhs) + (|pfTree| '|Assign| (list pflhsitems pfrhs))) + +@ + \defun{pfAssign?}{Is this an Assign node?} \calls{pfAssign?}{pfAbSynOp?} <>= @@ -8960,6 +9026,14 @@ of the form ('expression expr position) @ +\defun{pfCollect}{Create a Collect node} +\calls{pfCollect}{pfTree} +<>= +(defun |pfCollect| (pfbody pfiterators) + (|pfTree| '|Collect| (list pfbody pfiterators))) + +@ + \defun{pfCollect?}{Is this a Collect node?} \calls{pfCollect?}{pfAbSynOp?} <>= @@ -9007,6 +9081,14 @@ of the form ('expression expr position) @ +\defun{pfDo}{Create a Do node} +\calls{pfDo}{pfTree} +<>= +(defun |pfDo| (pfbody) + (|pfTree| '|Do| (list pfbody))) + +@ + \defun{pfDo?}{Is this a Do node?} \calls{pfDo?}{pfAbSynOp?} <>= @@ -9271,6 +9353,14 @@ of the form ('expression expr position) @ +\defun{pfImport}{Construct an Import node} +\calls{pfImport}{pfTree} +<>= +(defun |pfImport| (pfitems) + (|pfTree| '|Import| (list pfitems))) + +@ + \defun{pfIterate}{Construct an Iterate node} \calls{pfIterate}{pfTree} <>= @@ -9376,6 +9466,14 @@ of the form ('expression expr position) @ +\defun{pfLocal}{Construct a Local node} +\calls{pfLocal}{pfTree} +<>= +(defun |pfLocal| (pfitems) + (|pfTree| '|Local| (list pfitems))) + +@ + \defun{pfLocal?}{Is this a Local node?} \calls{pfLocal?}{pfAbSynOp?} <>= @@ -9400,6 +9498,24 @@ of the form ('expression expr position) @ +\defun{pfLoop}{Construct a Loop node} +\calls{pfLoop}{pfTree} +<>= +(defun |pfLoop| (pfiterators) + (|pfTree| '|Loop| (list pfiterators))) + +@ + +\defun{pfLoop1}{pfLoop1} +\calls{pfLoop1}{pfLoop} +\calls{pfLoop1}{pfListOf} +\calls{pfLoop1}{pfDo} +<>= +(defun |pfLoop1| (body) + (|pfLoop| (|pfListOf| (list (|pfDo| body))))) + +@ + \defun{pfLoop?}{Is this a Loop node?} \calls{pfLoop?}{pfAbSynOp?} <>= @@ -9424,6 +9540,24 @@ of the form ('expression expr position) @ +\defun{pfLp}{pfLp} +\calls{pfLp}{pfLoop} +\calls{pfLp}{pfListOf} +\calls{pfLp}{pfDo} +<>= +(defun |pfLp| (iterators body) + (|pfLoop| (|pfListOf| (append iterators (list (|pfDo| body)))))) + +@ + +\defun{pfMacro}{Create a Macro node} +\calls{pfMacro}{pfTree} +<>= +(defun |pfMacro| (pflhs pfrhs) + (|pfTree| '|Macro| (list pflhs pfrhs))) + +@ + \defun{pfMacro?}{Is this a Macro node?} \calls{pfMacro?}{pfAbSynOp?} <>= @@ -9432,6 +9566,14 @@ of the form ('expression expr position) @ +\defun{pfMLambda}{Construct an MLambda node} +\calls{pfMLambda}{pfTree} +<>= +(defun |pfMLambda| (pfargs pfbody) + (|pfTree| '|MLambda| (list pfargs pfbody))) + +@ + \defun{pfMLambda?}{Is this an MLambda node?} \calls{pfMLambda?}{pfAbSynOp?} <>= @@ -9700,6 +9842,14 @@ of the form ('expression expr position) @ +\defun{pfSuchthat}{Create a Suchthat node} +\calls{pfSuchthat}{pfTree} +<>= +(defun |pfSuchthat| (pfcond) + (|pfTree| '|Suchthat| (list pfcond))) + +@ + \defun{pfSuchthat?}{Is this a SuchThat node?} \calls{pfSuchthat?}{pfAbSynOp?} <>= @@ -9818,6 +9968,14 @@ of the form ('expression expr position) @ +\defun{pfTyping}{Construct a Typing node} +\calls{pfTyping}{pfTree} +<>= +(defun |pfTyping| (pfitems) + (|pfTree| '|Typing| (list pfitems))) + +@ + \defun{pfTuple}{Return a Tuple node} \calls{pfTuple}{pfTree} <>= @@ -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| (doc name) + (mapcar #'(lambda (i) (|pfWDeclare| i doc)) (|pfParts| name))) + +@ + +\defun{pfWDeclare}{Construct a WDeclare node} +\calls{pfWDeclare}{pfTree} +<>= +(defun |pfWDeclare| (pfsignature pfdoc) + (|pfTree| '|WDeclare| (list pfsignature pfdoc))) + +@ + \defun{pfWhere}{Construct a Where node} \calls{pfWhere}{pfTree} <>= @@ -38895,6 +39070,7 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> @@ -38906,11 +39082,15 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> +<> +<> <> <> <> <> <> +<> <> <> <> @@ -38923,6 +39103,7 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> @@ -38960,6 +39141,7 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> @@ -38981,11 +39163,17 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> +<> +<> <> +<> +<> <> +<> <> <> <> @@ -39010,6 +39198,7 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> @@ -39039,6 +39228,7 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> @@ -39061,9 +39251,12 @@ This needs to work off the internal exposure list, not the file. <> <> <> +<> <> <> <> +<> +<> <> <> <> 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
books/bookvol5 merge and remove cparse, treeshake ptrees
20100222.04.tpd.patch src/input/pmint.input add comments
+20100223.01.tpd.patch +books/bookvol5 merge and remove ptrees.lisp
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} -<>= -${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 ) - -@ -<>= -${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} <>= ${OUT}/ptrop.${O}: ${MID}/ptrop.lisp @@ -3877,9 +3854,6 @@ clean: <> <> -<> -<> - <> <> 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}