マクロツイーター

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

LaTeX 上で色々と実装してみる話(えるたそ編-2)

前回の続き)
LISP on TeX
(参照:アレ

LISP on TeX」という怖そうな*1言語を用いた「フィボナッチなえるたそ」の実装。

\documentclass{jsarticle}
\usepackage{lisp-on-tex}
\newcommand*{\FibEltaso}[3]{\lispinterp{(\fibeltaso :#1 :#2 :#3)}}
\newcommand*{\newpar}{\par}
\lispinterp{%!!!!!!!!!!!!!!!!!!!!!!!!!!! LISP code
(\define \alphons (\quote (
  'ぜっと' 'えー' 'びー' 'しー' 'でぃー' 'いー' 'えふ' 'じー' 'えいち' 'あい'
  'じぇー' 'けー' 'える' 'えむ' 'えぬ' 'おー' 'ぴー' 'きゅー' 'あーる' 'えす'
  'てぃー' 'ゆー' 'ぶい' 'だぶりゅー' 'えっくす' 'わい')))
(\define \kdigits (\quote (
  '' '一' '二' '三' '四' '五' '六' '七' '八' '九')))
(\define \todecimal (\lambda (\n)
  (\lispif (\= \n :0) () (\cons (\mod \n :10) (\todecimal (\/ \n :10))))))
(\define \kposi (\lambda (\k \u)
  (\lispif (\= \k :0) ''
  (\lispif (\= \k :1) \u (\concat (\nth \kdigits \k) \u)))))
(\define \eltsjoin (\lambda (\ds \fs \ret)
  (\lispif (\= \ds ()) \ret
    (\eltsjoin (\cdr \ds) (\cdr \fs)
      (\concat ((\car \fs) (\car \ds)) \ret)))))
(\define \eltsfs
  (\list (\lambda (\k) (\nth \kdigits \k)) (\lambda (\k) (\kposi \k '十'))
    (\lambda (\k) (\kposi \k '百')) (\lambda (\k) (\kposi \k '千'))))
(\define \eltsform (\lambda (\n)
  (\lispif (\< \n :0) '' (\lispif (\< :9999 \n) ''
    (\eltsjoin (\todecimal \n) \eltsfs
      (\concat '反田' (\nth \alphons (\mod \n :26))))))))
(\define \fibseq (\lambda (\n \a \b)
  (\lispif (\= \n :0) () (\cons \a (\fibseq (\- \n :1) \b (\+ \a \b))))))
(\define \fibeltaso (\lambda (\a \b \n)
  (\begin (\texprint '\newpar')
    (\map (\lambda (\n) (\texprint (\concat (\eltsform \n) '\newpar')))
      (\fibseq \n \a \b)))))
}%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
\begin{document}
\FibEltaso{8}{2}{13}
\end{document}

出力結果は前回の記事を参照のこと。

(つづくね)

*  *  *

*「あれれ、前回の LISP on TeX ではわざわざパッケージまで作って避けてたのに、今回は自力で十進展開してる……」
ZR「だって \stringTOint を追加しないといけないし……」

*1:コワクナイヨー(様式美)