m4 でフリップ・フロップっぽい動作をするマクロを定義するにはどうしたらいいんだろう

m4 でフリップ・フロップっぽい動作をするマクロを定義するにはどうしたらいいんだろう

fxima さんから解答が!

define(`_MACRO',`ifelse(_FLAG, `foo',
                `define(`_FLAG', `bar')',
                `define(`_FLAG', `foo')')_FLAG')

すんばらしい. これぞ「ハッカー」の手技だ。
_MACRO が評価されるたんびに値が foo, bar とトグル動作する.

男は _MACRO の _MACRO に _MACRO を _MACRO した。
「いや.. _MACRO に _MACRO しないで」
「_MACRO の _MACRO はもう _MACRO だ。すっかり _MACRO が _MACRO じゃねぇか」
「_MACRO、_MACRO...」

を m4 で処理すると

男は foo の bar に foo を bar した。
「いや.. foo に bar しないで」
「foo の bar はもう foo だ。すっかり bar が foo じゃねぇか」
「bar、foo...」

になるわけだ。