引数を複数持つ補助関数もしばしば有効です.
代表例を見ておきましょう:
離れた部分の2倍をする関数.
3倍関数と4倍関数の両立.
a(X):XXX b(X):XXXX
と定めるより定義が1B短いことに注意しましょう.
a(X):XXX b(X):a(X)X
とすれば同じバイト数で3倍, 4倍が作れていますが, それでもやはり
a(X,Y):XXXYYYY
の方が優秀です. 3倍関数と4倍関数を続けて使うときにpppqqqqを
a(p,q)
と書けるからです. 間違えて
a(p,)a(,q)
と書くと1B損して真価が発揮できません. 特にpやqが長くなる (それ自身何かの3倍や4倍で定まる)
ようなときには間違いやすいので要注意ですね.
3倍,4倍の両立その2. a(s,r)などとしてsrsslやslssrなどもパーツが短く作れるという利点もあり重要です.
もちろんここに挙げた関数ばかりが重要とは限りません.
XXYXXやXXXYX, あるいは3変数使うXYXZXなどもありうるでしょう.
方向転換を含めてXXXlYYYYのような関数を上手く使える問題もありそうです.
特にn倍関数とm倍関数の両方が欲しいような状況では, 関数定義をあれこれいじりながら最適な方法を模索してみてください!