m4 ゴルフ FizzBuzz 他ネタバレ
ちょっと奇妙なコードになったので紹介します。
FizzBuzz 110 byte
define(l,`ifelse($1,101,dn,eval($1%15),0,FizzBuzz ,eval($1%5),0,Buzz ,eval($1%3),0,Fizz ,$1 )l(incr($1))')l(1)
マクロ l は、引数が 101 の時、ifelse で文字列 dn が生じ、それがマクロの呼び出し l(incr($1)) と結合して dnl になり、再帰が終了します。
number slide 116 byte
define(f,`$3ifelse($3 ,$4,`m4exit',$1,0,` f($2,incr($2)',` f(decr($1),$2'),incr($3),$4)')f(0,1,1,include(/dev/fd/0))
ifelse で生じる文字列だけではマクロ f の括弧が閉じていません。ifelse の後ろに続く部分と併せると括弧が閉じます。