\d e \l b \l d \l z \l x \l y / dynamic cache (tree -> graph) S:{:[({};{`get})~2#x;x;({};{`get};:[(#Z)>i:Z?x;i;-1+#Z,:,x])]} G:{:Z[x]:lazy Z x} / primitive types K:({`n};{`u};{`v};{`a};{`b}) / trace execution T:0 trace:{[t]if[T;do[1;`0:,"";`0:Disp tree t];if[T<0;if[#0:`;T::0]]];t} tree:{:[4:x;x;({};{`get})~2#x;_f Z x 2;_f'x]} / e-tree evaluation C:0 eval:{run .:[C;Cache x;(x;())]} run:{Z::y;E x} step:{next[trace x]({}~*x .){x,1}/()} lazy:({}~*:)step/ list:{:[{`pair}~*x;join . trace x;x]} join:{(,E y),E z} eager:list lazy@ typed:{(7=4:*x)&(*x)_in,/K} value:{:[typed x;x 1;x]} type:{:[typed x;x;({`n};x)]} / verb, adverb formation E:value eager@ V1:{E({};x;y)} V2:{E({};({};x;y);z)} V:E@{({};x;y)}/ A:{v:1_,/";x",/:$!x;."{[f;",v,"]e.V(f;",v,")}"} / single step next:{[t;s] a:*t . s :[a~{`pair} ;m[t]s a~{`cons} ;c[t;s]t ./:p[s]2 a~{`cond} ;o[t;s]@[t ./:p[s]3;0;E] a~{`head} ;ht[t;s;1;*:]lazy t .*p[s]1 a~{`tail} ;ht[t;s;2;1_]lazy t .*p[s]1 a~{`eq} ;e[t;s]@lazy't ./:p[s]2 a~{`get} ;g[t;s]lazy t .*p[s]1 a _in K ;kk[t;s;t . s]type eager t .*p[s]1 a _in!b ;f[t;s]a a _in**X ;x[t;s;X[1]i]t ./:p[s]X_ i:X[0]?a a _in**Y ;y[t;s]Y[1]Y[0]?a 7=4:a ;q[t;s;a]t .*p[s]1 n[t]s]} / atomic evaluation p:{?((- 1+!y)_\:x),'2} m:{[t;s].[t;s;type eager@]} n:{[t;s].[t;s;{({`n};x)}]} e:{[t;s;d].[t;-2_ s;:;~/d]} c:{[t;s;d].[t;-2_ s;:;{`pair},d]} o:{[t;s;d].[t;-3_ s;:;:[*d;d 1;d 2]]} ht:{[t;s;i;f;d].[t;-1_ s;:;:[{`pair}~*d;d i;f value d]]} g:{[t;s;d].[t;-1_ s;:;G d]} x:{[t;s;a;d].[t;(-#d)_ s;:;a{x[y]}/d]} y:{[t;s;a].[t;s;:;a]} f:{[t;s;a]:[0>v:b[~a]`v;f_[t;s;v]b a;fn[t;s;b a]v]} f_:{[t;s;v;a].[t;(-v)_ s;:;a . t ./:p[s;-v]]} fn:{[t;s;a;v].[t;v _ s;:;{x[y]}/[a;E't ./:p[s]v]]} q:{[t;s;a;d].[t;-1_ s;:;a[d]]} kk:{[t;s;a;b].[t;-1_ s;:;k[lc a[0][];lc b[0][]][a 1]b 1]} lc:`$(_ci@[!256;65+!26;+;32])@_ic$: k.n.n:{({`n};x[y])} k.b.v:{({`v};x[y])} k.u.n:{({`n};x[y])} k.v.n:{({`u};x[y])} k.a.v:{({`u};x[y])} k.b.u:{({`v};x[y])} k.a.u:{({`u};x[y])} k.u.u:{({`u};x@y@)} k.u.v:{({`u};{[x;y;z;w]x y[z]w}[x;y])} k.a.n:{({`u};x[y])} k.b.n:{({`v};x[y])} \d ^ Eval:e.eval