%% %% This is file `lisp-on-tex.sty'. %% %% License: Modified BSD - see LICENSE file %% %% input buffer and read function %%=========================================== %% Macros for Input Programs %%=========================================== %%=========================================== %% Public Field %%=========================================== %% \setinputbuffer : Set the input \def\setinputbuffer#1{\gdef\@read@buffer{#1}} %% \readchar : Read a letter from the input \def\readchar{% \ifx\@eof\@read@buffer \gdef\@currentread{\@@eof}% \else \expandafter\@car@buffer\@read@buffer\relax \fi} %% \unreadchar : Unread a letter from the input \def\unreadchar{% \ifx\@eof\@currentread\else \expandafter\@unreadchar\@currentread \gdef\@currentread{}\fi} %%=========================================== %% Private Field %%=========================================== \def\@dummy{\@@dummy} \def\@read@buffer{} % The input \def\@currentread{} % The front letter \def\@eof{\@@eof} % EOF \def\@car@buffer#1#2\relax{\gdef\@currentread{#1}\gdef\@read@buffer{#2}} \def\@unreadchar#1{% \expandafter\gdef \expandafter\@read@buffer \expandafter{\expandafter#1\@read@buffer}} %% assoc \cs -> value % constructor \def\makeassoc#1{\def#1{}} % add member \def\addassoc#1#2#3{%#1(assoc),#2(\cs),#3(value) \gdef\@temp@add{#3}% \expandafter\expandafter\expandafter\gdef\expandafter\expandafter \expandafter#1\expandafter\expandafter\expandafter{% \expandafter\expandafter\expandafter#2\expandafter\expandafter\expandafter{\expandafter\@temp@add\expandafter}#1}} % remove member. It cause error if there is no member \def\rmassoc#1#2{% #1(assoc), #2(\cs) \def\@rmassoc##1#2##2##3\relax{##1##3}% \expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{\expandafter\@rmassoc#1\relax}} % exist? \def\ifmemassoc#1#2{% \expandafter\@ifmemassoc\expandafter#2#1\relax} \def\@ifmemassoc#1#2\relax{\ifx\@dummy#2\@dummy\let\@next\@iffalse\else\def\@next{\@@ifmemassoc#1#2\relax}\fi\@next} \def\@@ifmemassoc#1#2#3#4\relax{% \begingroup\def#1{\@@target}% \ifx#1#2\endgroup\let\@next\@iftrue\else\endgroup\def\@next{\@ifmemassoc#1#4\relax}\fi\@next} \def\@iffalse{\iffalse} \def\@iftrue{\iftrue} % get It cause error if there is no member \def\getassoc#1#2#3{% \def\@getassoc##1#2##2##3\relax{\gdef#3{##2}\relax}\expandafter\@getassoc#1\relax} % show \def\showassoc#1{\expandafter\@showassoc#1\relax} \def\@showassoc#1\relax{\ifx\@dummy#1\@dummy \let\@next\relax\else\def\@next{\@@showassoc#1\relax}\fi\@next} \def\@@showassoc#1#2#3\relax{\string#1:#2,\ifx\@dummy#3\@dummy\else \@showassoc#3\relax\fi} % interface \def\@lisp@empty{} \def\lispinterp#1{% \@lispread\@lisp@read@eval@loop#1\@end@lispread} \def\@lisp@read@eval@loop#1#2{% \ifx#1\@tlabel@exception \let\@@next\relax \else \def\@reg@tmp{#1{#2}}% \def\@@next{% \lispeval\@reg@tmp\@reg@tmp \@lispread\@lisp@read@eval@loop}% \fi\@@next} % eval %% write buffer \gdef\@temp@write@buffer{} \def\@add@to@write@buffer#1#2{% \expandafter\gdef\expandafter#1\expandafter{#1#2}} %% global environment \makeassoc\@globalenv % implemeted functions % CONS CAR CDR \newcount\@malloc \def\@get@car#1\@tlabel@cons#2{\@@get@car#1#2} \def\@@get@car#1#2#3{\global\let#1#2} \def\@get@cdr#1\@tlabel@cons#2{\@@get@cdr#1#2} \def\@@get@cdr#1#2#3{\global\let#1#3} \def\@make@cons#1#2#3#4#5{% \expandafter\gdef\csname car\the\@malloc\endcsname{#2{#3}}% \expandafter\gdef\csname cdr\the\@malloc\endcsname{#4{#5}}% \@@make@cons#1\csname car\the\@malloc\endcsname\csname cdr\the\@malloc\endcsname \global\advance\@malloc1\relax} \def\@@make@cons#1{\expandafter\@@@make@cons\expandafter#1} \def\@@@make@cons#1#2{\expandafter\@@@@make@cons\expandafter#1\expandafter#2} \def\@@@@make@cons#1#2#3{\gdef#1{\@tlabel@cons{#2#3}}} \def\@defined@datatype{symbol,string,int,bool,dimen,skip,cons,nil,func,closure,macro,envfunc,mutable,exception,continuation} \def\@defined@specialform{lambda,quote,define,if,defmacro,begin,mdefine,setb,@let,@mlet,macroexpand,callocc} \edef\@defined@lisp@on@tex{\@defined@datatype,\@defined@specialform} %%%%%MEMO % \@tlabel@xxx -> \@eval@xxx\@apply@xxx\@@apply@xxx % \@dummy => ; % \@eval@xxx#1#2#3 : #1 = cont, #2 = env, #3 = reg %%%%% \def\@@select@eval#1#2#3{#1} \def\@@select@apply#1#2#3{#2} \def\@@select@@apply#1#2#3{#3} \def\@type@define@filed#1{\expandafter\@@type@define@filed\expandafter#1} \def\@@type@define@filed#1#2{\expandafter\@@@type@define@filed \expandafter#1\expandafter#2} \def\@@@type@define@filed#1#2#3{\expandafter\@@@@type@define@field \expandafter#1\expandafter#2\expandafter#3} \def\@@@@type@define@field#1#2#3#4{% \def#1##1##2##3{\gdef##3{#4{##1}}}% \def#2{\errmessage{LISP on TeX [internal apply]: cannot apply}}% \def#3{\errmessage{LISP on teX [function --- apply]: cannot apply}}% \def#4{#1#2#3}} \@for\@type:=\@defined@lisp@on@tex\do{% \expandafter\@type@define@filed% \csname @eval@\@type\endcsname% \csname @apply@\@type\endcsname% \csname @@apply@\@type\endcsname% \csname @tlabel@\@type\endcsname} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % memo of fasteval branch % Each bound variables \var % is defined as TeX macro [[@lisp@env@\var]] %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\@lisp@expand@env@last{\@lisp@expand@env@last} \def\@lisp@expand@environment#1#2#3\@lisp@expand@env@last{% \def\@@tmp@lisp@env{#3}% \def\@@tmp{\expandafter\def\csname @lisp@env@\string#1\endcsname{#2}}% \ifx\@empty\@@tmp@lisp@env \let\@@next\relax \else \def\@@next{\@lisp@expand@environment#3\@lisp@expand@env@last}% \fi \expandafter\@@next\@@tmp} \def\lispeval#1#2{% #1 : \cs -> S-exp, #2 : target register \gdef\@temp@write@buffer{}% \expandafter\def\expandafter\@@tmp@lisp@env\expandafter{\@globalenv}% \ifx\@empty\@globalenv\else \expandafter\@lisp@expand@environment\@globalenv\@lisp@expand@env@last\fi \expandafter\@eval#1{}#2% \@temp@write@buffer} \def\@eval#1#2#3#4{% \begingroup \def\@@tmp@lisp@env{#3}% \ifx\@empty\@@tmp@lisp@env\else \@lisp@expand@environment#3\@lisp@expand@env@last\fi \expandafter\@@select@eval#1{#2}{#3}#4% \endgroup} \def\@append@env@global#1#2{% \def#2{#1}% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{\expandafter#2\@globalenv}} \def\@eval@symbol#1#2#3{% #1 symbol #2 current env (ignored) #3 dist \expandafter\global\expandafter\let\expandafter#3\csname @lisp@env@\string#1\endcsname \ifx#3\relax % not found \errmessage{LISP on TeX [evaluation of a symbol]: unbound variable...}% \else \expandafter\@expand@if@mutable#3#3% \fi} \def\@expand@if@mutable#1#2#3{% \let\@@next\@expand@if@mutable@next@f \ifx#1\@tlabel@mutable\let\@@next\@expand@if@mutable@next@t\fi \@@next{#2}{#3}} \def\@expand@if@mutable@next@f#1#2{} \def\@expand@if@mutable@next@t#1#2{\global\let#2#1} \def\@@eval@get@typelabel#1#2{#1} \def\@eval@envcs#1#2#3#4{\expandafter\@@eval@envcs\expandafter{#1}#2{#3}#4} \def\@@eval@envcs#1#2#3#4{\@eval#2{#3}{#1}#4} \def\@eval@cons#1#2#3{\@@eval@cons#1{#2}#3} \def\@@eval@cons#1#2#3#4{% \expandafter\@eval#1{#3}\@temp@i \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel\@temp@i\@tlabel@exception \let\@@next\@@eval@cons@exception\else\let\@@next\@@eval@cons@normal\fi \@@next{#2}{#3}{#4}} \def\@@eval@cons@normal#1#2#3{% \def\@temp@ii{}% init \expandafter\@flatten@args#1\@temp@ii \expandafter\expandafter\expandafter\@@select@apply@pre \expandafter\@temp@i\@temp@ii\@{#2}#3} \def\@@select@apply@pre{\expandafter\@@select@apply} \def\@@eval@cons@exception#1#2#3{\global\let#3\@temp@i} \def\@flatten@args#1#2#3{% \ifx#1\@tlabel@cons \let\@flatten@next\@@flatten@next \else\ifx#1\@tlabel@nil \let\@flatten@next\@@flatten@fin \else \errmessage{LISP on TeX [internal apply]: Invalid args}% \fi\fi \@flatten@next#2#3} \def\@@flatten@next#1#2#3{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#3% \expandafter\expandafter\expandafter{\expandafter#3#1}% \expandafter\@flatten@args#2#3} \def\@@flatten@fin#1{} \def\@apply@lambda#1#2#3#4#5\@#6#7{% \def\@lambda@args{}% init \@create@bind#2{#3}\@lambda@args % convert arg list into internal form \expandafter\@create@closure\@lambda@args\@{#6}#4{#5}#7} \def\@create@closure#1\@#2#3#4#5{\gdef#5{\@tlabel@closure{{#1}{#2}#3{#4}}}} \def\@create@bind#1#2#3{% \ifx#1\@tlabel@symbol \let\@create@bind@next\@@create@listarg \else\ifx#1\@tlabel@cons \let\@create@bind@next\@@create@normalarg \else\ifx#1\@tlabel@nil \let\@create@bind@next\@@create@finarg \fi\fi\fi \@create@bind@next#2#3} \def\@@create@listarg#1#2{\expandafter\def\expandafter#2\expandafter{#2:#1}} \def\@@create@normalarg#1#2#3{% \expandafter\@@create@bind@symbol#1#3% \expandafter\@create@bind#2#3} \def\@@create@bind@symbol\@tlabel@symbol#1#2{\expandafter\def\expandafter#2\expandafter{#2#1}} \def\@@create@finarg#1{\expandafter\def\expandafter#1\expandafter{#1:\@@unused}} \def\@@unused{\@@unused} \def\@apply@quote#1#2#3\@#4#5{\gdef#5{#2{#3}}} \def\@apply@define#1\@tlabel@symbol#2#3#4\@#5#6{% \@eval#3{#4}{#5}#6% define does NOT use local environment \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#6\@tlabel@exception \let\@@next\@apply@define@exception \else\let\@@next\@apply@define@normal\fi \@@next{#2}{#6}} \def\@apply@define@exception#1#2{} \def\@apply@define@normal#1#2{% \expandafter\addassoc\expandafter\@globalenv\expandafter#1\expandafter{#2}% \gdef#2{\@tlabel@nil{}}} \def\@apply@mdefine#1\@tlabel@symbol#2#3#4\@#5#6{% \@eval#3{#4}{#5}#6% mdefine does NOT use local environment \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#6\@tlabel@exception \let\@@next\@apply@define@exception \else\let\@@next\@apply@mdefine@normal\fi \@@next{#2}{#6}} \def\@apply@mdefine@normal#1#2{% \expandafter\@mutable@allocate#2% \expandafter\addassoc \expandafter\@globalenv \expandafter#1% \expandafter{\expandafter\@tlabel@mutable \expandafter{\csname mutable\the\@malloc\endcsname}}% \global\advance\@malloc1\relax \gdef#2{\@tlabel@nil{}}} \def\@mutable@allocate#1#2{\expandafter\gdef\csname mutable\the\@malloc\endcsname{#1{#2}}} \def\@apply@setb#1\@tlabel@symbol#2#3#4\@#5#6{% \@eval#3{#4}{#5}#6% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#6\@tlabel@exception \let\@@next\@apply@setb@exception \else\let\@@next\@apply@setb@normal\fi \@@next{#2}{#5}{#6}} \def\@apply@setb@normal#1#2#3{% \let\@@save#3% \@append@env@global{#2}\@temp@env \getassoc\@temp@env#1\@temp@i \let#3\@@save% \expandafter\@set@mutable\@temp@i#3% \gdef#3{\@tlabel@nil{}}} \def\@set@mutable\@tlabel@mutable#1#2{\global\let#1#2} \def\@apply@setb@exception#1#2#3{} \def\@apply@@let#1\@tlabel@symbol#2#3#4#5#6\@#7#8{% \@eval#3{#4}{#7}#8% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#8\@tlabel@exception \let\@@next\@apply@@let@exception \else\let\@@next\@apply@@let@normal\fi \@@next{#2}{#5}{#6}{#7}{#8}} \def\@apply@@let@normal#1#2#3#4#5{% \expandafter\def\expandafter\@temp@env\expandafter{\expandafter#1\expandafter{#5}#4}% \expandafter\gdef\expandafter\@@tco \expandafter{\expandafter\@@eval@envcs\expandafter{\@temp@env}#2{#3}#5}% \aftergroup\@@tco} \def\@apply@@let@exception#1#2#3#4#5{} \def\@apply@@mlet#1\@tlabel@symbol#2#3#4#5#6\@#7#8{% \@eval#3{#4}{#7}#8% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#8\@tlabel@exception \let\@@next\@apply@@let@exception \else\let\@@next\@apply@@mlet@normal\fi \@@next{#2}{#5}{#6}{#7}{#8}} \def\@apply@@mlet@normal#1#2#3#4#5{% \expandafter\global\expandafter\let\csname mutable\the\@malloc\endcsname#5% \expandafter\def\expandafter#5\expandafter{\expandafter\@tlabel@mutable \expandafter{\csname mutable\the\@malloc\endcsname}}% \global\advance\@malloc1\relax \expandafter\def\expandafter\@temp@env\expandafter{\expandafter#1\expandafter{#5}#4}% \expandafter\gdef\expandafter\@@tco \expandafter{\expandafter\@@eval@envcs\expandafter{\@temp@env}#2{#3}#5}% \aftergroup\@@tco} \def\@apply@defmacro#1\@tlabel@symbol#2#3#4\@#5#6{% \@eval#3{#4}{#5}#6% NOT use local env! \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#6\@tlabel@exception \let\@@next\@apply@define@exception \else\let\@@next\@apply@defmacro@normal\fi \@@next{#2}{#6}} \def\@apply@defmacro@normal#1#2{% \expandafter\@apply@defmacro@next\expandafter#1#2% \gdef#2{\@tlabel@nil{}}} \def\@apply@defmacro@next#1\@tlabel@closure#2{\addassoc\@globalenv#1{\@tlabel@macro{#2}}} \def\@apply@if#1#2#3#4#5#6#7\@#8#9{% \@eval#2{#3}{#8}#9% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#9\@tlabel@exception \let\@@next\@apply@if@exception \else\let\@@next\@apply@if@normal\fi \@@next{#4}{#5}{#6}{#7}{#8}{#9}} \def\@apply@if@normal#1#2#3#4#5#6{% \expandafter\@apply@if@next#6#1{#2}#3{#4}{#5}#6% \aftergroup\@@tco} \def\@apply@if@exception#1#2#3#4#5#6{} \def\@apply@if@next\@tlabel@bool#1#2#3#4#5#6#7{% \let\@@next\relax \ifx#1t% \let\@@next\@apply@if@next@t \else\ifx#1f% \let\@@next\@apply@if@next@f \else \errmessage{LISP on TeX [if]: Invalid boolean. It's BUG. Please report.}% \fi\fi\@@next{#1}{#2}{#3}{#4}{#5}{#6}{#7}} \def\@apply@if@next@t#1#2#3#4#5#6#7{\gdef\@@tco{\@eval#2{#3}{#6}#7}} \def\@apply@if@next@f#1#2#3#4#5#6#7{\gdef\@@tco{\@eval#4{#5}{#6}#7}} %% use general \def\@apply@eval@args#1#2#3#4{% \let\@@next@pre\@apply@eval@args@pre@default \ifx#3\relax \let\@@next\@@next@fin \else \let\@@next@pre\@apply@eval@args@pre@i \fi\@@next@pre{#1}{#2}{#3}{#4}\@@next#1{#2}} \def\@apply@eval@args@pre@default#1#2#3#4{} \def\@apply@eval@args@pre@i#1#2#3#4{% \let\@@save#1% \@eval#3{#4}{#2}#1% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#1\@tlabel@exception \let\@@next\@apply@eval@args@exception \else\let\@@next\@apply@eval@args@normal\fi \@@next{#1}} \def\@apply@eval@args@normal#1{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#1\expandafter\expandafter\expandafter{% \expandafter\@@save#1}% \let\@@next\@apply@eval@args} \def\@apply@eval@args@exception#1{\let\@@next\@apply@eval@args@ignore} \def\@@next@fin#1#2{} \def\@apply@eval@args@ignore#1#2#3\relax#4{} \def\@apply@get@args@head@typelabel#1#2\relax{#1} \def\@apply@func#1#2\@#3#4{% \def\@temp@i{}% \def\@@dummy@temp@i{}% \@apply@eval@args\@temp@i{#3}#2\relax\relax \ifx\@@dummy@temp@i\@temp@i% \def\@@test@temp@i{\@tlabel@dummy{}}% \else \let\@@test@temp@i\@temp@i \fi \expandafter\expandafter\expandafter\ifx \expandafter\@apply@get@args@head@typelabel\@@test@temp@i\relax\@tlabel@exception \let\@@next\@apply@func@exception \else \let\@@next\@apply@func@normal \fi \@@next{#1}{#3}{#4}} \def\@apply@func@normal#1#2#3{% \expandafter\@apply@func@next\expandafter{\@temp@i}{#1}{#2}#3} \def\@apply@func@next#1#2#3#4{\@@apply@func{#2}#1\@{#3}#4} \def\@apply@func@exception#1#2#3{% \expandafter\gdef\expandafter#3\expandafter{\@temp@i}} \def\@@apply@func#1#2\@#3#4{\gdef\@@tco{#1#4#2\relax\relax}\aftergroup\@@tco} \def\@apply@envfunc#1#2\@#3#4{% \def\@temp@i{}% \def\@@dummy@temp@i{}% \@apply@eval@args\@temp@i{#3}#2\relax\relax \ifx\@temp@i\@@dummy@temp@i% \def\@@test@temp@i{\@tlabel@dummy{}}% \else \let\@@test@temp@i\@temp@i \fi \expandafter\expandafter\expandafter\ifx \expandafter\@apply@get@args@head@typelabel\@@test@temp@i\relax\@tlabel@exception \let\@@next\@apply@func@exception \else \let\@@next\@apply@envfunc@normal \fi \@@next{#1}{#3}{#4}} \def\@apply@envfunc@normal#1#2#3{% \expandafter\@apply@envfunc@next\expandafter{\@temp@i}{#1}{#2}#3} \def\@apply@envfunc@next#1#2#3#4{\@@apply@envfunc{#2}#1\@{#3}#4} \def\@@apply@envfunc#1#2\@#3#4{\gdef\@@tco{#1#4{#3}#2\relax\relax}\aftergroup\@@tco} \def\@apply@closure#1#2\@#3#4{% \def\@temp@i{}% \def\@@dummy@temp@i{}% \@apply@eval@args\@temp@i{#3}#2\relax\relax \ifx\@temp@i\@@dummy@temp@i% \def\@@test@temp@i{\@tlabel@dummy{}}% \else \let\@@test@temp@i\@temp@i \fi \expandafter\expandafter\expandafter\ifx \expandafter\@apply@get@args@head@typelabel\@@test@temp@i\relax\@tlabel@exception \let\@@next\@apply@func@exception \else \let\@@next\@apply@closure@normal \fi \@@next{#1}{#3}{#4}} \def\@apply@closure@normal#1#2#3{% \expandafter\@apply@closure@next\expandafter{\@temp@i}{#1}{#2}#3} \def\@apply@closure@next#1#2#3#4{\@@apply@closure{#2}#1\@{#3}#4} \def\@@apply@closure#1#2\@#3#4{\@@apply@closure@next#1#2\@#4} \def\@@apply@closure@next#1#2#3#4#5\@#6{% \def\@temp@env{}% \@@apply@create@env\@temp@env#1#5\relax\relax \expandafter\gdef\expandafter\@@tco\expandafter{% \expandafter\@@eval@envcs\expandafter{\@temp@env#2}#3{#4}#6}% \aftergroup\@@tco} \def\@@apply@create@env#1#2:#3#4#5{% \let\@@next@pre\@@apply@create@env@pre@default \ifx!#2!% if #2 is empty \let\@@next@args@\@empty \ifx#3\@@unused \let\@@next\@@apply@create@env@fin \else \ifx#4\relax \let\@@next\@@apply@create@env@fin \@@apply@modify@env#1\@tlabel@nil{}#3\@ \else \let\@@next@pre\@@apply@create@env@pre@i \fi \fi \else \let\@@next@pre\@@apply@create@env@pre@ii \fi\@@next@pre{#1}{#2}{#3}{#4}{#5}\expandafter\@@next\expandafter#1\@@next@args@:#3} \def\@@apply@create@env@pre@default#1#2#3#4#5{} \def\@@apply@create@env@pre@i#1#2#3#4#5{% \@@apply@create@env@phantom \expandafter\@@apply@modify@env\expandafter#1\@@@@ph#3\@ \expandafter\gdef\csname car\the\@malloc\endcsname{#4{#5}}% \let\@@next\@@apply@create@env@cdr} \def\@@apply@create@env@pre@ii#1#2#3#4#5{% \@@apply@modify@env#1#4{#5}#2\@ \@@next@args#2\@ \let\@@next\@@apply@create@env} \def\@@apply@create@env@cdr#1:#2{\@@@apply@create@env@cdr} \def\@@@apply@create@env@cdr#1#2{% \ifx#1\relax \expandafter\gdef\csname cdr\the\@malloc\endcsname{\@tlabel@nil{}}% \global\advance\@malloc1\relax \let\@@next\relax \else \global\advance\@malloc1\relax \@@apply@create@env@phantom \global\advance\@malloc-1\relax \expandafter\@@set@cdr\@@@@ph \global\advance\@malloc1\relax \expandafter\gdef\csname car\the\@malloc\endcsname{#1{#2}}% \let\@@next\@@@apply@create@env@cdr \fi\@@next} \def\@@set@cdr#1#2{\expandafter\gdef\csname cdr\the\@malloc\endcsname{#1{#2}}} \def\@@apply@create@env@phantom{% \expandafter\@@@apply@ph\csname car\the\@malloc\endcsname\csname cdr\the\@malloc\endcsname} \def\@@@apply@ph#1{\expandafter\@@@@apply@ph\expandafter#1} \def\@@@@apply@ph#1#2{\def\@@@@ph{\@tlabel@cons{#1#2}}} \def\@@apply@create@env@fin#1:#2{} \def\@@apply@modify@env#1#2#3#4#5\@{% \ifx#2\relax \errmessage{LISP on TeX [apply --- closure]: too few args}% \else \expandafter\def\expandafter#1\expandafter{#1#4{#2{#3}}}% \fi} \def\@@next@args#1#2\@{\def\@@next@args@{#2}} \def\@@apply@macro#1#2\@#3#4{\@@apply@macro@next#1#2\@{#3}#4} \def\@@apply@macro@next#1#2#3#4#5\@#6#7{% \def\@temp@env{}% \@@apply@create@env\@temp@env#1#5\relax\relax \expandafter\gdef\expandafter\@@tco\expandafter{% \expandafter\@@eval@envcs\expandafter{\@temp@env#2}#3{#4}#7% \expandafter\@eval#7{#6}#7}% \aftergroup\@@tco} \let\@apply@macro\@@apply@macro \def\@apply@macroexpand#1#2#3\@#4#5{% cont, args, \@ env, reg \let\@@apply@macro@next\@@apply@macro@next@expand@only \@eval#2{#3}{#4}#5% \expandafter\@eval#5{#4}#5} \def\@@apply@macro@next@expand@only#1#2#3#4#5\@#6#7{% \def\@temp@env{}% \@@apply@create@env\@temp@env#1#5\relax\relax \expandafter\gdef\expandafter\@@tco\expandafter{% \expandafter\@@eval@envcs\expandafter{\@temp@env#2}#3{#4}#7% \expandafter\@eval@if@macro#7{#6}#7}% \aftergroup\@@tco} \def\@eval@if@macro#1#2#3#4{% \ifx#1\@tlabel@cons\@eval@if@macro@#2{#3}#4\fi} \def\@eval@if@macro@#1#2#3#4{% \expandafter\@eval#1{#3}\@temp@i \expandafter\@eval@if@macro@@\@temp@i#1#2{#3}#4} \def\@eval@if@macro@@#1#2#3#4#5#6{% \ifx#1\@tlabel@macro\@eval\@tlabel@cons{#3#4}{#5}#6\else\gdef#6{\@tlabel@cons{#3#4}}\fi} \def\@apply@begin#1#2\@#3#4{% \@apply@begin@next#4{#3}#2\relax\relax} \def\@apply@begin@next#1#2#3#4#5#6{% \ifx#5\relax \let\@@next\@apply@begin@final \else \let\@@next\@apply@begin@cont \fi\@@next{#1}{#2}{#3}{#4}{#5}{#6}} \def\@apply@begin@final#1#2#3#4#5#6{% \gdef\@@tco{\@eval#3{#4}{#2}#1}\aftergroup\@@tco} \def\@apply@begin@cont#1#2#3#4#5#6{% \@eval#3{#4}{#2}#1% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#1\@tlabel@exception \let\@@next\@apply@begin@exception \else \let\@@next\@apply@begin@normal \fi \@@next{#1}{#2}{#5}{#6}} \def\@apply@begin@normal#1#2#3#4{% \@apply@begin@next#1{#2}#3{#4}} \def\@apply@begin@exception#1#2#3#4{} \newcount\c@lisp@continuation@label \def\@apply@callocc#1#2#3\@#4#5{% \advance\c@lisp@continuation@label 1 \@eval#2{#3}{#4}#5% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#5\@tlabel@exception \let\@@next\@apply@callocc@exception \else \let\@@next\@apply@callocc@normal \fi \@@next{#1}{#2}{#3}{#4}{#5}} \def\@apply@callocc@exception#1#2#3#4#5{} \def\@apply@callocc@normal#1#2#3#4#5{% \toks0\expandafter{#5}% \edef\@@next{\noexpand\begingroup \noexpand\expandafter\noexpand\@@select@apply\the\toks0 \noexpand\@tlabel@continuation{\the\c@lisp@continuation@label}}% \@@next\@{#4}#5\endgroup \expandafter\@apply@callocc@check#5#5} \def\@apply@callocc@check#1#2#3{% \ifx#1\@tlabel@exception \let\@@next\@apply@callocc@check@contlabel \else \let\@@next\@apply@callocc@gobble \fi \@@next#2\@#3} \def\@apply@callocc@gobble#1\@#2{} \def\@apply@callocc@check@contlabel#1#2\@#3{% \ifnum#1=\c@lisp@continuation@label \let\@@next\@apply@callocc@hook \else \let\@@next\@apply@callocc@gobble@after@check \fi \@@next#3{#2}} \def\@apply@callocc@gobble@after@check#1#2{} \def\@apply@callocc@hook#1#2{\gdef#1{#2}} \def\@apply@continuation#1#2#3\@#4#5{% \@eval#2{#3}{#4}#5% \expandafter\expandafter\expandafter\ifx \expandafter\@@eval@get@typelabel#5\@tlabel@exception \let\@@next\@apply@continuation@exception \else \let\@@next\@apply@continuation@normal \fi \@@next{#1}{#2}{#3}{#4}{#5}} \def\@apply@continuation@normal#1#2#3#4#5{% \toks0\expandafter{#5}% \xdef#5{\noexpand\@tlabel@exception{{#1}{\the\toks0}}}} % reader \input{lisp-read.sty} %arithmetical functions \input{lisp-arith.sty} %string manipulation \input{lisp-string.sty} % connection to TeX world \input{lisp-latexutil.sty} % type cast functions \input{lisp-cast.sty} % other primitive functions \input{lisp-prim.sty} % functions defined by LISP codes \input{lisp-util.sty}