Macr055で基本演算
拙作のテキストベースマクロプロセッサMacr055( https://github.com/metanest/macr055 )で、和田先生のブログにあるマクロの例題( http://parametron.blogspot.jp/search/label/Christopher StracheyのGPM )をやってみたので、情報共有などのため記録として載せます。
まず http://parametron.blogspot.jp/2015/01/cristopher-stracheygpm.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|+|`{$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|*|`{$1| {m55_define|$1|`{+|{*|{1-|$1}|$2}|$2}'} {m55_define|0|0}}'}{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}
本家GPM、あるいは和田先生の手元の実装と、m55ではクウォートの掛かりかたが違っていて、m55ではm4と同様に、どれだけ深いクウォートの中であっても変数の $1 などは置換されるため、この程度のマクロの場合は、一部で$$$のように多重エスケープが必要になるものの、全体的には記述が単純になる傾向があるようです(もっと後で出てくる複雑なマクロになると、どちらが有利か、だいぶわからなくなってきます)。