diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/lazylist/lazylist.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/lazylist/lazylist.sty | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/lazylist/lazylist.sty b/Master/texmf-dist/tex/latex/lazylist/lazylist.sty new file mode 100644 index 00000000000..ebe3d202ed9 --- /dev/null +++ b/Master/texmf-dist/tex/latex/lazylist/lazylist.sty @@ -0,0 +1,112 @@ +% Filename: Lambda.sty +% Author: Alan Jeffrey +% Last modified: 12 Feb 1990 +% Modified 24 July 2003 by Robin Fairbairns, to change file name and +% licence requirements, at Alan Jeffrey's request +% +% This package is (c) 1990 Alan Jeffrey. +% +% Version 1.0a +% +% Use and distribution are subject to the LaTeX Project Public +% License (lppl), version 1.2 (or any later version, at your +% convenience). +% +% A copy of the latest version of lppl may be found at +% http://www.latex-project.org/lppl.txt +% +% See the Gnu manifesto for details on why software ought to be free. +% +% Tugboat are given permission to publish any or all of this. +% +% This package provides a pile of lambda-calculus and list-handling +% macros of an incredibly obtuse nature. Read lazylist.tex to find +% out what they all do and how they do it. This \TeX\ code was +% formally verified. +% +% Alan Jeffrey, 25 Jan 1990. + +\def\Identity#1{#1} + +\def\Error% + {\errmessage{Abandon verification all + ye who enter here}} + +\def\First#1#2{#1} +\def\Second#1#2{#2} + +\def\Compose#1#2#3{#1{#2{#3}}} + +\def\Twiddle#1#2#3{#1{#3}{#2}} + +\let\True=\First +\let\False=\Second +\let\Not=\Twiddle + +\def\And#1#2{#1{#2}\False} +\def\Or#1#2{#1\True{#2}} + +\def\Lift#1#2#3#4{#1{#4}{#2}{#3}{#4}} + +\def\Lessthan#1#2{\TeXif{\ifnum#1<#2 }} + +\def\gobblefalse\else\gobbletrue\fi#1#2% + {\fi#1} +\def\gobbletrue\fi#1#2% + {\fi#2} +\def\TeXif#1% + {#1\gobblefalse\else\gobbletrue\fi} + +\def\Nil#1#2{#2} +\def\Cons#1#2#3#4{#3{#1}{#2}} +\def\Stream#1{\Cons{#1}{\Stream{#1}}} +\def\Singleton#1{\Cons{#1}\Nil} + +\def\Head#1{#1\First\Error} +\def\Tail#1{#1\Second\Error} + +\def\Foldl#1#2#3% + {#3{\Foldl@{#1}{#2}}{#2}} +\def\Foldl@#1#2#3#4% + {\Foldl{#1}{#1{#2}{#3}}{#4}} +\def\Foldr#1#2#3% + {#3{\Foldr@{#1}{#2}}{#2}} +\def\Foldr@#1#2#3#4% + {#1{#3}{\Foldr{#1}{#2}{#4}}} + +\def\Cat#1#2{\Foldr\Cons{#2}{#1}} + +\def\Reverse{\Foldl{\Twiddle\Cons}\Nil} + +\def\All#1{\Foldr{\Compose\And{#1}}\True} +\def\Some#1{\Foldr{\Compose\Or{#1}}\False} +\def\Isempty{\All{\First\False}} + +\def\Filter#1% + {\Foldr{\Lift{#1}\Cons\Second}\Nil} + +\def\Map#1{\Foldr{\Compose\Cons{#1}}\Nil} + +\def\Insert#1#2#3% + {#3{\Insert@{#1}{#2}}{\Singleton{#2}}} +\def\Insert@#1#2#3#4% + {#1{#2}{#3}% + {\Cons{#2}{\Cons{#3}{#4}}}% + {\Cons{#3}{\Insert{#1}{#2}{#4}}}} +\def\Insertsort#1{\Foldr{\Insert{#1}}\Nil} + +\def\Unlistize#1{[#1\Unlistize@{}]} +\def\Unlistize@#1{#1\Foldr\Commaize{}} +\def\Commaize#1#2{, #1#2} + +\def\Listize[#1]% + {\Listize@#1,\relax]} +\def\Listize@#1,#2]% + {\TeXif{\ifx\relax#2}% + {\Singleton{#1}}% + {\Cons{#1}{\Listize@#2]}}} + +\def\Show#1[#2]% + {\Unlistize{#1{\Listize[#2]}}} + + |