[2017-04-29 追記]本記事で扱っている Macrodown は“0.91版以前”のもので、当時の Macrodown は本記事のソースコードにあるような、「ちょっと高級なマクロプロセッサ」(マークアップ層のマクロ機能)を持っていて(当時はまだそれしか実装されてなかった?)、しかも別にプログラム言語の層も持っている、という設計でした。
現在開発中の 1.x 版では設計方針が大きく変わっていて、「マークアップ層のマクロ作成機能」は削除され、マクロは全て(まともな)プログラム言語により作られます。(要するに、マクロが作れるのはまともなプログラム言語が操れる人に限られる。)
従って、本記事で述べられていることは現存の Macrodown には全く当てはまらない、ということに注意してください。
最近、ごく限られた範囲で何かと話題の Macrodown。
Macrodown とは
Macrodown(マクロダウン)は LaTeX や HTML などのマークアップ言語をラップするための軽量[要出典]マークアップ言語です。マクロ定義機能があり,可変長引数を扱うこともできます。OCaml で実装しており,……(Macrodown マニュアルより)つまり、「ちょっと高級なマクロプロセッサ」を使って、「オレオレマークアップ」による文書の論理構造記述から既存のマークアップ文書形式(LaTeX や HTML)に変換できるようにしよう、という話。
[style.mcrdh]\macro \sec-head @text {<h2>@text;</h2>}% \macro \TeX {<span class="evil">TeX</span>}%[test.mcrd]\sec-head{\TeX;はアレ}例えばこのような Macrodown 文書を用意して、
macrodown style.mcrdh test.mcrd -o test.htmlを実行すると、次のような HTML ファイルが得られる。[test.html]<h2><span class="evil">TeX</span>はアレ</h2>style.mcrdh を変更すると、同じ記述から LaTeX コードを得ることも解るだろう。実際に、Macrodown のマニュアルは Macrodown で書かれていて、HTML と LaTeX の両方に変換できるようになっている。
Macrodown は「ユーザが自在に設計できるメタなマークアップ言語」といえるだろう。
アレの予感
……と思っていたんだが、何やら様子がおかしい……。
これを見る限り、Macrodown も TeX と同様のアレ性をもつことを疑わざるを得ない。
周知の通り、TeX がアレであるそもそもの元凶は、それが文書作成を目的としたマクロ志向の言語であるにも関わらず Turing 完全の計算能力をもつことである。ゆえに、Macrodown が Turing 完全であることが示されれば、「Macrodown はアレ」であることの強い確証になることは間違いないだろう。
アレの確証
……というわけで、作ってみた。
このプログラムは BCT という esolang(難解プログラミング言語)のインタプリタを実装している。これを Macrodown で変換すると、次のような BCT の計算過程*1が得られる。BCT は Turing 完全であるので、Macrodown は Turing 完全である。
01 1 11 110 10 101 1010 010 010 010 10 101どうやら我々は、また一つ、アレな言語を抱え込んでしまったようである。
*1:定義上、これが BCT の「出力」でもある。