タグ

2014年5月20日のブックマーク (4件)

  • LISP on TeXを作る(評価器編2) - hak7a3が書き残す何か

    前回の続き.evalの丸である関数適用の説明に入ろう. consセルの評価 関数適用が起こるタイミングとはすなわち,consセルが評価されるタイミングである.まずは,consセルのデータ構造を確認しておこう.consセルは,次の形をもつトークン列である. \@tlabel@cons{\carXX\cdrXX} \carXXがCAR,\cdrXXがCDRを表す制御綴りであり,展開するとLISP on TeXにおけるオブジェクトの形式をしたトークン列を得ることができる. consセルの評価規則は簡単で, CARを評価して,適用可能なオブジェクトを得る CDRを引数として,さきほど得られたオブジェクトに適用する 関数やクロージャの場合は各引数が評価される.マクロの場合はそのまま引き渡す だけである.consセルの評価規則の実装,\@eval@consを確認しよう. \def\@eval@con

    LISP on TeXを作る(評価器編2) - hak7a3が書き残す何か
  • LISP on TeXを作る(評価器編1) - hak7a3が書き残す何か

    LISP on TeXネタの最終消費作業*1.今回は評価器編.ここが丸と言いたいところだったが,あまりに分量が多かったため,評価器編は2回に分割する.前編はevalの基構造,後編は関数適用がメインである. データ構造と評価の基構造 再確認になるが,LISP on TeXで用いられるデータはすべて,次の構造をしている. \@tlabel@hoge{contents} ここで,制御綴り\@tlabel@hogeは型の情報を示すラベル(型ラベル)である.波括弧の中身はデータ体である. \@tlabel@hogeを展開すると,次のトークン列 \@eval@hoge\@apply@hoge\@@apply@hoge を得ることができる.最初の制御綴りが,型hogeの値に対するevalを実現しているマクロ,後者2つがapplyを実現するためのマクロになっている. 評価器の起動 データ構造がわか

    LISP on TeXを作る(評価器編1) - hak7a3が書き残す何か
  • LISP on TeXを作る(パーサ編) - hak7a3が書き残す何か

    LISP on TeXネタを全部消費して,新たなるTeX芸へ向かうためのソリューションその2.今回はパーサ編.要はS式を解釈して前回のデータ構造編で説明したデータへ変換するマクロがどのように構成されているかを示す.これから説明するマクロは,lisp-read.styにそのほとんどが記述されている. はじめに 実装説明に入る前に,パーサ全体にかかる注意事項を述べておく.まず,LISP on TeXの文法はLL1であるので,字句解析と構文解析をごちゃ混ぜにした実装になっている.また,一部のマクロを除き,パーサのマクロは \def\controlsequence#1#2{....} の形で定義されている.#1は制御綴りで,#2は現在解析中の先頭文字である.これらのマクロは,#1の中身を\cs,パースの結果得られたデータ構造を\@tlabel@xxx{hoge}とすると \cs\@tlabel@x

    LISP on TeXを作る(パーサ編) - hak7a3が書き残す何か
  • LISP on TeXを作る(データ構造編) - hak7a3が書き残す何か

    この記事はTeX & LaTeX Advent Calendar 2013の12/25担当分です. < 12/24 は munepiさん || 2014/12/1は\@undefined はじめに TeX & LaTeX Advent Calendar 2013のトリはLISP on TeXとなった. 今年はTUG2013での発表という大イベントがあった.そのときはなるべく「急カーブ注意」なことは避けてきたのだが,標識3個くらいまでならむしろやったほうが良かったのではないかと後悔したのが記憶に新しい*1. 今日はそのリベンジとして,LISP on TeXの中身を説明していこうと思う*2.今回はデータ構造にのみ言及する.TeXでプログラミングしたいキチガイコアな人からLISP on TeXの型を拡張したいという変態まで,参考になれば僥倖である*3. LISP on TeXのデータ構造の基

    LISP on TeXを作る(データ構造編) - hak7a3が書き残す何か