1,3,7,15倍

特定の動きの1,3,7,15倍を作りたいとしましょう.
このとき,"w(X):XpX"という関数が力を発揮します.つまり

w(w())=ppp, w(w(w()))=ppppppp, w(w(w(w())))=ppppppppppppppp

などという具合です.

原理は,特殊な2倍関数の講でも説明しました.
一般に,w(w(w(X)))=XpXpXpXpXpXpXpXなどとなり,この場合は
Xpの8倍からpだけ足りないものになっています.
こういう原理で「2倍の繰り返しから1つ足りないもの」が作れるので,
3,7,15倍等が可能になるわけです.もちろん1倍は「w()」で書けます. 原理は「2^n倍からp足りない」ですので,例えば

w(X):XsX, w(w(w(w(lsllsl))))

などとすると,15歩進みながら,「lsllsl」は16回実行されることが分かります.


もちろん「a(X):…a(XpX)」の形の再帰により2^n-1倍を作る方法も考えられますね.
15倍を作ればいい場合などには実行時間が短くなるかも?
実用価値がどのくらいあるのかは微妙で,自分も数えるほどしか
使ったことがありませんが,覚えておくと役に立つことがあるかもしれません.

戻る inserted by FC2 system