単純にn倍関数を作るだけでなく,方向転換も混ぜておくと
短縮につながることがあります.例えば
w(X):XXXXr, w(w(w(ss)))
といった使い方でしょうか.これは単にw(X):XXXXとしていると
w(w(w(ss)r)r)
と書く必要があり,1byteの損が分かると思います.「w(●)r」が複数回あるため,
そこも関数の一部に組み込むというわけです.
この場合,2変数のテクニックでw(X,Y):XXYYYrなどとすると,
「2倍してr」と「3倍してr」が同時に定義されます.
「2倍してr」と「単に3倍」などは両立できないので注意が必要です.
しかしながらこのような関数を上手に利用することで
短縮につながる問題もあるので色んな可能性を考えるようにしましょう.
見落としやすい(?)利用を紹介しましょう.
例えばw(X):XrXrという関数を定義したとします.
これはrをつけて2倍するという関数ですね.
こういう関数が利用できる場面として見落としやすいのが,
「w()」により"rr"が作れているという点です.
2倍関数と,180度方向転換がたくさん必要な場合などで有利かもしれません.
次に数値を使ってY倍関数を定義する場合の方向転換を考えてみましょう.
例えばa(X,Y):Xa(X,Y-1)r
と定義すると,「XをY回やった後で,
rもY回やる」というものが出来ます.Yに応じて曲がる方向が変わるため
考えにくいかもしれませんが,「3倍して左」「5倍して右」などが
混在する問題などでは有効かもしれません.