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}