summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty')
-rw-r--r--Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty94
1 files changed, 62 insertions, 32 deletions
diff --git a/Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty b/Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty
index 7645135a88b..4f921612d83 100644
--- a/Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty
+++ b/Master/texmf-dist/tex/latex/lisp-on-tex/lisp-prim.sty
@@ -1,23 +1,23 @@
%% Syntax functions
-\addassoc\@globalenv\quote{\@tlabel@quote{}}%
-\addassoc\@globalenv\lambda{\@tlabel@lambda{}}
-\addassoc\@globalenv\define{\@tlabel@define{}}
-\addassoc\@globalenv\lispif{\@tlabel@if{}}
-\addassoc\@globalenv\defmacro{\@tlabel@defmacro{}}
-\addassoc\@globalenv\begin{\@tlabel@begin{}}
-\addassoc\@globalenv\defineM{\@tlabel@mdefine{}}
-\addassoc\@globalenv\setB{\@tlabel@setb{}}
-\addassoc\@globalenv\@let{\@tlabel@@let{}}
-\addassoc\@globalenv\@mlet{\@tlabel@@mlet{}}
-\addassoc\@globalenv\macroexpand{\@tlabel@macroexpand{}}
-\addassoc\@globalenv\callOCC{\@tlabel@callocc{}}
-
-\addassoc\@globalenv\car{\@tlabel@func{\@get@car}}
-\addassoc\@globalenv\cdr{\@tlabel@func{\@get@cdr}}
-\addassoc\@globalenv\cons{\@tlabel@func{\@make@cons}}
+\@lisp@env@add@global\quote{\@tlabel@quote{}}%
+\@lisp@env@add@global\lambda{\@tlabel@lambda{}}
+\@lisp@env@add@global\define{\@tlabel@define{}}
+\@lisp@env@add@global\lispif{\@tlabel@if{}}
+\@lisp@env@add@global\defmacro{\@tlabel@defmacro{}}
+\@lisp@env@add@global\begin{\@tlabel@begin{}}
+\@lisp@env@add@global\defineM{\@tlabel@mdefine{}}
+\@lisp@env@add@global\setB{\@tlabel@setb{}}
+\@lisp@env@add@global\@let{\@tlabel@@let{}}
+\@lisp@env@add@global\@mlet{\@tlabel@@mlet{}}
+\@lisp@env@add@global\macroexpand{\@tlabel@macroexpand{}}
+\@lisp@env@add@global\callOCC{\@tlabel@callocc{}}
+
+\@lisp@env@add@global\car{\@tlabel@func{\@lisp@func@check@args{1}{\@lisp@perform@car}}}
+\@lisp@env@add@global\cdr{\@tlabel@func{\@lisp@func@check@args{1}{\@lisp@perform@cdr}}}
+\@lisp@env@add@global\cons{\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@perform@cons}}}
\newcount\@temp@count
-\addassoc\@globalenv\length{\@tlabel@func{\@lisp@length}}
+\@lisp@env@add@global\length{\@tlabel@func{\@lisp@func@check@args{1}{\@lisp@length}}}
\def\@lisp@length{\@temp@count0\relax\@lisp@length@}
\def\@lisp@length@#1#2#3{%
\ifx#2\@tlabel@nil
@@ -34,7 +34,7 @@
\def\@@lisp@length#1#2#3{\expandafter\@lisp@length@\expandafter#3#2}
%equality
-\addassoc\@globalenv\={\@tlabel@func{\@lisp@equal}}
+\@lisp@env@add@global\={\@tlabel@func{\@lisp@func@check@args{2}{\@lisp@equal}}}
\def\@lisp@equal#1#2#3#4#5{%
\gdef#1{\@tlabel@bool{f}}%
\ifx#2#4%
@@ -44,7 +44,7 @@
\fi}
% printing function
-\addassoc\@globalenv\print{\@tlabel@func{\@tex@print}}
+\@lisp@env@add@global\print{\@tlabel@func{\@lisp@func@check@args{1}{\@tex@print}}}
\def\@tex@print#1{\gdef#1{\@tlabel@nil{}}\@tex@print@}
\def\@tex@print@#1#2{%
\ifx#1\@tlabel@int
@@ -84,7 +84,7 @@
-\addassoc\@globalenv\texprint{\@tlabel@func{\@tex@texprint}}
+\@lisp@env@add@global\texprint{\@tlabel@func{\@lisp@func@check@args{1}{\@tex@texprint}}}
\def\@tex@texprint#1#2#3{%
\gdef#1{\@tlabel@nil{}}\@@tex@texprint#2{#3}}
\def\@@tex@texprint#1#2{%
@@ -96,7 +96,7 @@
\@add@to@write@buffer\@temp@write@buffer{INNER TOKEN}%
\fi\fi}
-\addassoc\@globalenv\stdprint{\@tlabel@func{\@tex@stdprint}}
+\@lisp@env@add@global\stdprint{\@tlabel@func{\@lisp@func@check@args{1}{\@tex@stdprint}}}
\def\@tex@stdprint#1#2#3{%
\gdef#1{\@tlabel@nil{}}%
\let\@save@write@buffer\@temp@write@buffer
@@ -109,23 +109,23 @@
% Type predicates
\def\@type@pred@add#1{\expandafter\@@type@pred@add\expandafter#1}
-\def\@@type@pred@add#1#2{\addassoc\@globalenv#1{\@tlabel@func{#2}}}
+\def\@@type@pred@add#1#2{\@lisp@env@add@global#1{\@tlabel@func{\@lisp@func@check@args{1}{#2}}}}
\def\@type@pred@define#1{\expandafter\@@type@pred@define\expandafter#1}
\def\@@type@pred@define#1#2{%
\def#1##1##2##3{\ifx##2#2\gdef##1{\@tlabel@bool{t}}\else\gdef##1{\@tlabel@bool{f}}\fi}}
-\def\@type@addassoc{\addassoc\@globalenv}
-\@for\@type:=\@defined@datatype\do{%
- \expandafter\@type@pred@add\csname\@type Q\endcsname\csname @type@\@type\endcsname
- \expandafter\@type@pred@define\csname @type@\@type\endcsname\csname @tlabel@\@type\endcsname}
+\@for\@lisp@on@tex@type:=\@defined@datatype\do{%
+ \expandafter\@type@pred@add\csname\@lisp@on@tex@type Q\endcsname
+ \csname @type@\@lisp@on@tex@type\endcsname
+ \expandafter\@type@pred@define\csname @type@\@lisp@on@tex@type\endcsname\csname @tlabel@\@lisp@on@tex@type\endcsname}
-\addassoc\@globalenv\pairQ{\@tlabel@func{\@type@cons}}
-\addassoc\@globalenv\booleanQ{\@tlabel@func{\@type@bool}}
+\@lisp@env@add@global\pairQ{\@tlabel@func{\@type@cons}}
+\@lisp@env@add@global\booleanQ{\@tlabel@func{\@type@bool}}
% eval , apply
-\addassoc\@globalenv\eval{\@tlabel@envfunc{\@extern@eval}}
+\@lisp@env@add@global\eval{\@tlabel@envfunc{\@extern@eval}}
\def\@extern@eval#1#2#3#4{\@eval#3{#4}{#2}#1}
-\addassoc\@globalenv\apply{\@tlabel@envfunc{\@extern@apply}}
+\@lisp@env@add@global\apply{\@tlabel@envfunc{\@extern@apply}}
\def\@extern@apply#1#2#3#4#5#6{% reg, env, labelfun, contfun, labellist, contlist
\def\@lisp@apply@temp{}% init
\@flatten@args#5{#6}\@lisp@apply@temp
@@ -134,13 +134,43 @@
{\expandafter\@@select@@apply#2{#3}#1\@{#4}#5}}
% values
-%\addassoc\@globalenv\values{\@tlabel@func{\@lisp@multivalues}}
+%\@lisp@env@add@global\values{\@tlabel@func{\@lisp@multivalues}}
%\def\@lisp@multivalues#1#2\relax{\gdef#1{#2}}
% read
-\addassoc\@globalenv\read{\@tlabel@func{\@lisp@read@stdin}}
+\@lisp@env@add@global\read{\@tlabel@func{\@lisp@func@check@args{0}{\@lisp@read@stdin}}}
\def\@lisp@read@stdin#1{%
\read-1 to#1%
\def\@lisp@read@stdin@callback##1##2{%
\gdef#1{##1{##2}}}%
\expandafter\@lispread\expandafter\@lisp@read@stdin@callback#1}
+
+% create a list
+\@lisp@env@add@global\list{\@tlabel@func{\@lisp@func@check@args{*}{\@lisp@prim@list@pre}}}
+\def\@lisp@prim@list@pre#1{\gdef#1{}\@lisp@prim@list#1}
+\def\@lisp@prim@list#1#2#3{%
+ \ifx#2\relax
+ \let\@@next\@lisp@prim@list@fin
+ \else
+ \let\@@next\@lisp@prim@list@add
+ \fi\@@next#1#2{#3}}
+\def\@lisp@prim@list@add#1#2#3{%
+ \begingroup
+ \toks0\expandafter{#1}%
+ \toks1{#2{#3}}%
+ \xdef#1{\the\toks1 \the\toks0}%reverse arguments
+ \endgroup
+ \@lisp@prim@list#1}
+\def\@lisp@prim@list@fin#1#2#3{\expandafter\@lisp@prim@list@fin@\expandafter#1#1\relax\relax}
+\def\@lisp@prim@list@fin@#1{%
+ \gdef#1{\@tlabel@nil{}}%
+ \@lisp@prim@list@fin@@#1}
+\def\@lisp@prim@list@fin@@#1#2#3{%
+ \ifx#2\relax
+ \def\@@next##1##2##3{}%
+ \else
+ \let\@@next\@lisp@prim@list@fin@@@
+ \fi
+ \@@next#1#2{#3}}
+\def\@lisp@prim@list@fin@@@#1#2#3{\expandafter\@lisp@prim@list@fin@@@@#1#2{#3}#1}
+\def\@lisp@prim@list@fin@@@@#1#2#3#4#5{\@lisp@perform@cons#5#3{#4}#1{#2}\@lisp@prim@list@fin@@#5}