- 追加された行はこの色です。
- 削除された行はこの色です。
*数値関数の再利用 [#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(,9)r,1)
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を付け加えることもありますが, ~
「十分多量の成長をした前提での繰り返し」を作るのは, かなり多くの数値関数でできます. ~
この再利用が上手く決まると, 多くの場合, 他の書き方に比べて非常に高い圧縮率を実現できます!
上手く使いこなすのはなかなか難しいですが, ~
数値でパーツを作り繰り返す場合には, とにかくこの再利用が出来ないか検討する癖をつけると, ~
だんだんと使えるようになってくるのではないでしょうか?