Macr055でフィボナッチ他
次の http://parametron.blogspot.jp/2015/02/christopher-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|fib|`{$1| {m55_define|$1|`{+|{fib|{1-|$1}}|{fib|{1-|{1-|$1}}}}'} {m55_define|1|1} {m55_define|0|0}}'}{m55_dnl} {fib|0}, {fib|1}, {fib|2}, {fib|3}, {fib|4}, {fib|5}, {fib|6}
階乗
{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|*|`{$1| {m55_define|$1|`{+|{*|{1-|$1}|$2}|$2}'} {m55_define|0|0}}'}{m55_dnl} {m55_define|!|`{$1| {m55_define|$1|`{*|$1|{!|{1-|$1}}}'} {m55_define|0|1}}'}{m55_dnl} {!|0} {!|1} {!|2} {!|3}
中央値、というか3要素の「場合分けによるソート」までですが、{m55_define|snd|$2} というようなマクロを使って2番目を取り出すようにするのはトリビアルな改造でしょう。
{m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8| {m55_define|-1|$$$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|med|`{{lt|$2|$1}| {m55_define|t|`{{lt|$3|$1}| {m55_define|t|`{{lt|$3|$2}| {m55_define|t|$3,$2,$1} {m55_define|f|$2,$3,$1}}'} {m55_define|f|$2,$1,$3}}'} {m55_define|f|`{{lt|$3|$2}| {m55_define|t|`{{lt|$3|$1}| {m55_define|t|$3,$1,$2} {m55_define|f|$1,$3,$2}}'} {m55_define|f|$1,$2,$3}}'}}'}{m55_dnl} {med|0|0|0} {med|0|0|1} {med|0|0|2} {med|0|1|0} {med|0|1|1} {med|0|1|2} {med|0|2|0} {med|0|2|1} {med|0|2|2} {med|1|0|0} {med|1|0|1} {med|1|0|2} {med|1|1|0} {med|1|1|1} {med|1|1|2} {med|1|2|0} {med|1|2|1} {med|1|2|2} {med|2|0|0} {med|2|0|1} {med|2|0|2} {med|2|1|0} {med|2|1|1} {med|2|1|2} {med|2|2|0} {med|2|2|1} {med|2|2|2}
GCD
{m55_define|1-|`{-1|0|1|2|3|4|5|6|7|8| {m55_define|-1|$$$1}}'}{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|gcd|`{$2| {m55_define|$2|`{{lt|$1|$2}| {m55_define|f|`{gcd|{-|$1|$2}|$2}'} {m55_define|t|`{gcd|$1|{-|$2|$1}}'}}'} {m55_define|$1|$1}}'}{m55_dnl} {gcd|2|4}, {gcd|5|3}, {gcd|6|3}