LISP on TeX で例のフィボナッチなアレをやる件について
例の「LISP on TeX」について。
現在は \texprint
関数が実装されて解決したようだ。ということで例のアレをやってみる。
\documentclass{article} %\usepackage[dvipdfmx]{graphicx} \usepackage{tikz} \usepackage{lisp} \lispinterpl{ (\define \fibonacciDiagram (\lambda \n (\texprint (\concat '% \begin{tikzpicture} \node (F0) {1}; \node [right of=F0] (G0) {1}; ' (((((\fibDiagIter :1) :2) :1) \n) '') '% \end{tikzpicture}% ')))) (\define \fibDiagIter (\lambda \prev (\lambda \curr (\lambda \i (\lambda \n (\lambda \out (\lispif (\= \i \n) \out (((((\fibDiagIter \curr) (\+ \prev \curr)) (\+ \i :1)) \n) (\concat \out ((((\fibDiagOne (\strOfInt \prev)) (\strOfInt \curr)) (\strOfInt \i)) (\strOfInt (\- \i :1)))))))))))) (\define \fibDiagOne (\lambda \prev (\lambda \curr (\lambda \n (\lambda \nn (\concat '% \node [below of=F' \nn '] (F' \n ') ' (\group \curr) '; \node [below of=G' \nn '] (G' \n ') ' (\group \prev) '; \draw [->] (F' \nn ') -- (F' \n '); \draw [->] (F' \nn ') -- (G' \n '); \draw [->] (G' \nn ') -- (F' \n '); ')))))) } \newcommand\FibonacciDiagram[1]{% \lispinterpl{ (\fibonacciDiagram :#1) }% } \begin{document} \FibonacciDiagram{10} \end{document}
出力は、以前に templatex でやったものと同じ。このコードでは、LaTeX の \FibonacciDiagram
命令を LoT の \fibonacciDiagram
関数で実現していているので、引数の値を変えて実行することも可能である。