なんと、以下のコードはちゃんとした、実行できるMATLABコードになっています。
growth.m
figure(1)
clf,hold on,grid on,view(58,38),feval(@(mm,x)mm(@(O)mm(@(Y,U,V,W,v,nN,NN,Mm,mM,md,Nn)
mm(@(G)mm(Y(G),x,0,0,v(mM(x))),mm(@(L)(@(M)(@(n,p,q,r)mm(mm(@(l,n)l{n},{@()1,@(){mm(Y
(L), [25*
v(1. /r*(
n-1) )- 25/ 2*(r
-1); md((n-1),r)*5 ^2-(
r-1* 1)*5^ 2/ 2;0] ,[0;
0;1] ,[ 1;0 ;0 ], 6) ,M(n
-1,0 ,0,v(mM(x)))} }, ~(n>
.0)+ 2*~(n <= 0))) )) ,(@(
d)(( @( u,n ,t ,N )( (( mm (mm ((@(
l,n) l{n}),{(@()mm (@ ()(mm(@()Nn(u (1),
u(2) ,u(3) ,( '*g' ), U,5)) )) ),(@ ()mm
((@( w, b, p, m, mN ){( mm (@ (A )Nn(
A(1, :) ,A(2,:),A(3,: ), '-',
W,N^ 2* 0.3,V ,( mN(N /6 ))),
[u,( u+ n* w)] )) ,( mm (@ (f ,T, S){(
d(u+ n*w,S,T,N-1)) ,( d(u+n*w,f(S,n ,p),
f(T, n,p), N -1)) ,( d(u+n *w ,f(S ,n,p
*2), (f (T ,n ,( p)* 2)), N-1 )) }, (@(r
,n,p )r *(Mm(p))-nN(r ,n )*NN
(p)+ (1 -Mm(p )) *n*( n' *r))
,NN( m) *n -t* Mm (m ), n* Mm(m
)+NN (m)*t))}),9.8 /( 7.14...
-N), 0.1,2 +1 /10.6 ,- .102
+1,( @( r) [1 *1 *.32
,.22 ,1 *.08
]*r+ [0 ,1,(
.5)] *( 1-r)
)))} ,1+(
N>0))))))))))),@(f)mm(@(g)@(m,n,o,p)mm(f(g(g)),m,n,o,p),@(g)@(m,n,o,p)mm(f(g(g)),m,n,
o,p)),O(0),O(1),O(2),O(3),O(4),O(5),O(6),O(7),O(8),O(9)),(@(I)mm(@(l,m)mm(l{1+(I>2)},
char(m((m(58+I)-46):(m(59+I)-47))+18)),{@(J)J,@str2func},['[O`YS`aWhS1]Z]`ZW\SEWRbV',
'TZ]]`Q`]aaaW\Q]aa_`b[]R^Z]b!TSdOZ/9>GLQTW[^c']))),@feval,9);
そして、これを実行すると、なんとこの図が出てくるのです!
手元にMATLABまたはOctave環境がある方は、是非自分で試してみてください。(Octaveだとかなり時間がかかりました。)コードをコピーして、直接コンソールに貼り付けるだけで実行できるようになっています。
このコードは、Yコンビネータの勉強をしていて書いていたものを、面白そうだったので難読化したものです。このコードのポイントは、function構文、そしてグローバル変数すら全く使わず、たった一つの無名関数を実行しているだけで動いているという事です。MATLABの無名関数では1行のコードしか記述・実行できないのですが、その制限の中で
の機能が実現されています。これらの中で特に再帰が一番難しく、そのテクニック中で用いられているのがYコンビネータの概念です。まだYコンビネータの原理については詳しくわかっていないのですが、1行の無名関数だけで再帰を実装できるこのテクニックには、かなり謎に満ちた魅力があります。
追記:これらのうち、再帰以外のテクニックについて詳しく説明したエントリを書きました。
MATLABの無名関数内で条件分岐・複数行実行を行う方法 - woodrush’s diary