// combinators I:{[x] x } K:{[x;y] x } S:{[x;y;z] x[z][y[z]] } B:{[x;y;z] x[y[z]] } C:{[x;y;z] x[z][y] } D:{[x;y;z;w] x[y[w]][z[w]] } E:{[x;y;z;w] x[y[w]][z] } F:{[x;y;z;w] x[y[z[w]]] } W:{[x;y] x[y][y] } T:{[x;y] y[x] } // K k:{:[7=4:x;x[];x]} k2:{x[k/y][k/z]} Z:+{(x;k2[. x])}'"+-*%" // apply/interpret a:{:[~#z;(y;z);_n _in(-1#y),1#z;(y,1#z;1_ z);(-2_ y;x[*-1#y;*z],1_ z)]} i:**(a[{x[y]}].)/(,()),,{:["`"=x;;(#*Z)>i:Z[0]?x;Z[1;i];. x]}' // abstraction elimination l:{|*(m .)/(();|x)} m:{:[~#y;(x;y);"."=*y;(|n[y 1;|x];2_ y);(x,*y;1_ y)]} n:{,/(o[x].)/(();y)} o:{(:[~#z;y;"`"~*z;y,"``S";x~*z;y,"I";y,"`K",*z];1_ z)} // combinator reduction / string <-> tree t:{:["`"=*x;_f'(0,1+(+\-1 1 x="`")?-1)_ x:1_ x;1=#x;*x;x]} s:{:[@x;x;"`",,/_f'x]} / optimization forms q:t''+(("``SKK" ;,"I") ("``S`KxI" ;,"x") ("``SI`Kx" ;"`Tx") ("``SxI" ;"`Wx") ("``S`Kx`Ky" ;"`K`xy") ("``S`Kx``Byz" ;"```Dxyz") ("``S`Kxy" ;"``Bxy") ("``S``Bxy`Kz" ;"```Exyz") ("``Sx`Ky" ;"``Cxy") ("``S``Bxyz" ;"```Fxyz")) / optimizer v:_ci 97+!26 d:{s@{{e[y;z;x]}/[x;*q;q 1]}/t x} e:{:[@z;z;_n~d:f[.();x;z:_f[x;y]'z];z;g[d;y]]} f:{:[_n~x;x;~@y;:[~@z;_f/[x;y;z]];y _in v;@[x;`$y;:;z];@y;:[y~z;x]]} g:{:[4:y;{:[1=#x;*x;x]}@h/[y,"";,/$!x;x[]];_f[x]'y]} h:{@[x;&x~\:y;:[;z]]} / eg i d l"``x.y.``+xy23" i[d l"x.y.``+xy"][2][3] i[d l"x.y.z.``+z``-xy"][2][3][4] i[d l"x.y.z.``xyz"][+][2][3] \ Ix x Kxy x Sxyz ``xz`yz Bxyz `x`yz Cxyz ``xyz Dxyzw ``x`yw`zw Exyzw ``x`ywz Fxyzw `x`y`zw Yx `x`Yx Wfx ``fxx Txf `fx