Macr055でアッカーマン関数他
次の http://parametron.blogspot.jp/2015/02/christopher-stracheygpm_22.html の記事に移って、アッカーマン関数他。
{m55_define|1+|`{1|2|3|4|5|6|7|8|9|10| {m55_define|1|$$$1}}'}{m55_dnl} {m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8| {m55_define|-1|$$$1}}'}{m55_dnl} {m55_define|a|`{$1| {m55_define|$1|`{$2| {m55_define|$2|`{a|{1-|$1}|{a|$1|{1-|$2}}}'} {m55_define|0|`{a|{1-|$1}|1}'}}'} {m55_define|0|`{1+|$2}'}}'}{m55_dnl} {a|0|0}, {a|0|1}, {a|0|2}, {a|0|3}, {a|0|4}, {a|0|5}, {a|0|6}, {a|0|7}, {a|0|8} {a|1|0}, {a|1|1}, {a|1|2}, {a|1|3}, {a|1|4}, {a|1|5}, {a|1|6}, {a|1|7} {a|2|0}, {a|2|1}, {a|2|2}, {a|2|3} {a|3|0}
カタラン三角形
{m55_define|1+|`{1|2|3|4|5|6|7|8|9|10| {m55_define|1|$$$1}}'}{m55_dnl} {m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8| {m55_define|-1|$$$1}}'}{m55_dnl} {m55_define|+|`{$1| {m55_define|$1|`{1+|{+|{1-|$1}|$2}}'} {m55_define|0|$2}}'}{m55_dnl} {m55_define|lt|`{$1| {m55_define|$1|`{p|$1|$2|{m55_define|p|`{lt|{1-|$1}|$2}'}}'} {m55_define|-1|t} {m55_define|$2|f}}'}{m55_dnl} {m55_define|or|`{$1| {m55_define|$1|t} {m55_define|f|$2}}'}{m55_dnl} {m55_define|c|`{$1$2| {m55_define|$1$2|`{{or|{lt|$1|0}|{lt|$2|$1}}| {m55_define|t|0} {m55_define|f|`{+|{c|$1|{1-|$2}}|{c|{1-|$1}|$2}}'}}'} {m55_define|00|1}}'}{m55_dnl} {c|0|0} {c|0|1}, {c|1|1} {c|0|2}, {c|1|2}, {c|2|2} {c|0|3}, {c|1|3}, {c|2|3}, {c|3|3} {c|0|4}, {c|1|4}, {c|2|4} {c|0|5}, {c|1|5} {c|0|6}, {c|1|6} {c|0|7}, {c|1|7} {c|0|8}, {c|1|8} {c|0|9}, {c|1|9}
論理演算
縦棒をマクロの記法で使っている都合で、記号ではなく名前で定義。XORについては先生のブログにある定義と違っていて、直截な定義にしてある。
{m55_define|and|`{$1| {m55_define|$1|f} {m55_define|t|$2}}'}{m55_dnl} {m55_define|or|`{$1| {m55_define|$1|t} {m55_define|f|$2}}'}{m55_dnl} {m55_define|not|`{$1| {m55_define|t|f} {m55_define|f|t}}'}{m55_dnl} {m55_define|xor|`{$1| {m55_define|$1|t} {m55_define|$2|f}}'}{m55_dnl} {m55_define|maj|`{or|{or|{and|$1|$2}|{and|$2|$3}}|{and|$3|$1}}'}{m55_dnl} {maj|f|f|f}, {maj|f|f|t}, {maj|f|t|f}, {maj|f|t|t} {maj|t|f|f}, {maj|t|f|t}, {maj|t|t|f}, {maj|t|t|t}
ヒルベルト曲線
SVGのpath要素のd属性を生成する。SVGのhコマンドとvコマンドを使って表現を圧縮している。SVGは左上原点だがそれの調整をしてないので、先生のPostScriptによる生成結果とは上下逆になる。
{m55_define|1+|`{1|2|3|4|5|6|7|8|9|10| {m55_define|1|$$$1}}'}{m55_dnl} {m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8| {m55_define|-1|$$$1}}'}{m55_dnl} {m55_define|+|`{$1| {m55_define|$1|`{1+|{+|{1-|$1}|$2}}'} {m55_define|0|$2}}'}{m55_dnl} {m55_define|-|`{$2| {m55_define|$2|`{-|{1-|$1}|{1-|$2}}'} {m55_define|0|$1}}'}{m55_dnl} {m55_define|lt|`{$1| {m55_define|$1|`{p|$1|$2| {m55_define|p|`{lt|{1-|$1}|$2}'}}'} {m55_define|-1|t} {m55_define|$2|f}}'}{m55_dnl} {m55_define|r|`{{lt|$1|$2}| {m55_define|t|$1} {m55_define|f|`{r|{-|$1|$2}|$2}'}}'}{m55_dnl} {m55_define|^|`{r|{1+|$1}|4}'}{m55_dnl} {m55_define|_|`{r|{1-|{+|4|$1}}|4}'}{m55_dnl} {m55_define|f|`{$1| {m55_define|0|h20} {m55_define|1|v20} {m55_define|2|h-20} {m55_define|3|v-20}}{$2| {m55_define|$2| } {m55_define|1}}'}{m55_dnl} {m55_define|p|`{$1| {m55_define|$1|`{q|{1-|$1}|{^|$2}}{f|{^|$2}|$1}{p|{1-|$1}|$2}{f|$2|$1}{p|{1-|$1}|$2}{f|{_|$2}|$1}{q|{1-|$1}|{_|$2}}'} {m55_define|0}}'}{m55_dnl} {m55_define|q|`{$1| {m55_define|$1|`{p|{1-|$1}|{_|$2}}{f|{_|$2}|$1}{q|{1-|$1}|$2}{f|$2|$1}{q|{1-|$1}|$2}{f|{^|$2}|$1}{p|{1-|$1}|{^|$2}}'} {m55_define|0}}'}{m55_dnl} <svg xmlns="http://www.w3.org/2000/svg" width="240" height="240"> <g fill="none"> <g stroke="#000"> <path d="m50 50 {p|3|0}{m55_dnl} "/> </g> </g> </svg>