マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

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 関数で実現していているので、引数の値を変えて実行することも可能である。