*数値関数の再利用 [#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を付け加えることもありますが, ~
「十分多量の成長をした前提での繰り返し」を作るのは, かなり多くの数値関数でできます. ~
この再利用が上手く決まると, 多くの場合, 他の書き方に比べて非常に高い圧縮率を実現できます!


上手く使いこなすのはなかなか難しいですが, ~
数値でパーツを作り繰り返す場合には, とにかくこの再利用が出来ないか検討する癖をつけると, ~
だんだんと使えるようになってくるのではないでしょうか?

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS