以下の内容はhttps://zrbabbler.hatenablog.com/entry/20131206/1386333357より取得しました。


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:コワクナイヨー(様式美)




以上の内容はhttps://zrbabbler.hatenablog.com/entry/20131206/1386333357より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14