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 の後ろに続く部分と併せると括弧が閉じます。