\d e \l d \l s / X.S:{[f;g;x]p:S x;(A;(A;f;p);(A;g;p))} X.S:{[f;g;x](A;(A;f;x);(A;g;x))} X.K:{[x;y](A;`I;x)} X.I:{[x]x} X.B:{[f;g;x](A;f;(A;g;x))} X.C:{[f;g;x](A;(A;f;x);g)} / X.S_:{[c;f;g;x]p:S x;(A;(A;c;(A;f;p));(A;g;p))} X.S_:{[c;f;g;x](A;(A;c;(A;f;x));(A;g;x))} X.B_:{[c;f;g;x](A;c;(A;f;(A;g;x)))} X.C_:{[c;f;g;x](A;(A;c;(A;f;x));g)} / X.Y:{[f]p:S(A;`Y;f);(A;f;p)} X.Y:{[f](A;f;(A;`Y;f))} / X.U:{[f;z]p:S z;(A;(A;f;(A;H;p));(A;T;p))} X.U:{[f;z](A;(A;f;(A;H;z));(A;T;z))} Trace:0 trace:{[v;r;t]if[v=Trace;`0:(40$rep r),{:[" "=*x;x;" ",x]} -40$rep t;if[#0:`;Trace::0]]} i:{(A;I;x)} S:{(A;i G;:[x _in Z;Z?x;-1+#Z,:,({};x)])} G:{if[{}~*p:Z x;p:reduce p 1;Z[x]:p];p} left:{[b]:[~@b;step . b;b _in!X;X b;b]} sys:{[b;f](2#b)~(A;f)} step:{[a;b;c]trace[2;()](a;b;c);case[a;b]c} case:{[a;b;c]:[sys[b]I;func b[2][strict c];sys[b]O;cond[b 2;c];b~H;hd c;b~T;tl c;exe[left b]c]} list:{[i;c]:[@c:reduce c;c;~#c;*c;sys[c]G;c[1]c 2;c . i]} hd:list[1 2] tl:list[2] exe:{[b;c]:[7=4:b;b[c];_n~b;c;(A;b;c)]} func:{[t]:[7=4:t;i t;t]} cond:{[i;t;e]:[strict i;reduce t;reduce e]} reduce:{[t](A~*:)(step .)/t} lazy:{[r;t]trace[1;r]t;:[~#t;(r;t);split[r]reduce t]} split:{[r;t]:[(@t)&~#r;(t;());(r,i#t;(i:t?A)_ t)]} strict:{[t]*(lazy .)/(();t)} eval:{[t]Z::();strict(A;t;`I)} \d ^ eval:e.eval \ initialize Z, t to common subexpressions