*数値関数の再利用 [#pfb81907] 1つの数値関数を用意し, それによりパーツを作るのが基本です. ~ 数値関数の引数を調整することで, 複数種類のパーツを作ることも可能ですね. ~ 例えば a(X,T):XXa(sX,T-1)XX という関数を用意した場合, -正方形を描く:a(r,9) -十分たくさん直進:a(,7) などとしてパーツが作れますね. このように, 1つの数値関数を複数の場所で使おうとするのは重要です. このように, 再利用の基本は複数のパーツ作成での両立です. ~ それに加えて重要なのが, パーツを増やす際の利用です. 例えば上の数値関数ではa(-,1)とすると4倍関数が作れるので, a(X,T):XXa(sX,T-1)XX a(a(,3)a(r,9)r,1) #ref(recycle_1.png,nolink) のように4倍に増やすことが可能になります. ---- しかし, この考え方だとa(,1)が綺麗なN倍関数になっていないとパーツを増やしにくいですね. ~ 他の例も見てみましょう. a(X,T):a(sX,T-1)XX b:a(,6)ra(r,6)b b [19B] #ref(recycle_2.png,nolink) 「たくさん直進して正方形を描き, 正方形の中央に移動する」というのを無限ループで増やしています. ~ これを, 一気に圧縮することができます: a(X,T):a(sX,T-1)XX a(ra(r,6),100) [16B] sが多量についた上で繰り返されますね. 場合によっては壁に向けて多量にsを付け加えることもありますが, ~ 「十分多量の成長をした前提での繰り返し」を作るのは, かなり多くの数値関数でできます. ~ この再利用が上手く決まると, 多くの場合, 他の書き方に比べて非常に高い圧縮率を実現できます! 上手く使いこなすのはなかなか難しいですが, ~ 数値でパーツを作り繰り返す場合には, とにかくこの再利用が出来ないか検討する癖をつけると, ~ だんだんと使えるようになってくるのではないでしょうか?