/ parse E_:`$E:"\\" A_:`$A:"/" V_:`$'_ci 97+!26 p:{ p:{ b:" \t\r\n";q:"\"";l:"[";r:"]";c:"'";d:".";t:":";m:"-" / punctuation a:_ci,/97 65+\:!26 / alpha n:"0123456789" / numeric Q:{(1(0 0 0;1 2 3;1 1 1;0 0 0)\(x=E)+2*x=q)?3} / find string N:{(t=x i)+i:&/x?/:b,q,E,A,l,r,c,t,K,a} / find number K:"~!@#$%^&*_-+=|:<,>.?" / K primitives :[~#z ;(x;y;z) / done ";;"~2#z ;(x;y;(z?*-1#b)_ z) / comment (*z)_in b ;(x;y;1_ z) / blank E=*z ;(.[x;y;,;(`$i#z),E_];y;(i:(z _lin a,n)?0)_ z:1_ z) / abstraction A=*z ;(.[x;y;,;A_];y;1_ z) / application l=*z ;(.[x;y;,;,()];y,#x . y;1_ z) / begin list r=*z ;(.[x;-1_ y;,;()];-1_ y;1_ z) / end list c=*z ;:[E=*1_ z;(.[x;y;,;.q,z[1 2],q];y;3_ z);(.[x;y;,;z 1];y;2_ z)] / character q=*z ;(.[x;y;,;,"",. i#z];y;(i:1+Q 1_ z)_ z) / string (*z)_in n ;(.[x;y;,;.{_ssr[(-t=*-1#x)!x;t;m]}i#z];y;(i:N z)_ z) / number (*z)_in K ;(.[x;y;,;{}$i#z];y;(i:1+z[1]_in d,t)_ z) / function (*z)_in a ;(.[x;y;,;`$i#z];y;(i:(z _lin a,n)?0)_ z) / name '"syntax"]} / oops *(p .)/(();!0;x," ")} / eliminate abstractions l:{|*(m .)/(();|x)} m:{:[~#y;(x;y);E_~*y;(|n[y 1;|x];2_ y);(x,,*y;1_ y)]} n:{,/(o[x].)/(();y)} o:{(:[~#z;y;A_~*z;y,A_,A_,`S;x~*z;y,`I;y,A_,`K,,*z];1_ z)} / list <-> tree, parts t:{:[A_~*x;_f's 1_ x;1=#x;*x;x]} s:{(0,1+(+\-1 1 x~\:A_)?-1)_ x} t_:{:[(-4=4:x)|@x;x;4:x;,x;A_,,/_f'x]} t_:{:[@x;x;(4:x)_in 0 -4;A_,,/_f'x;,x]} / combinator definitions (D = S', E = C', F = B*) C:(t`$')''+(("/Ix" ;,"x") ("//Kcx" ;,"c") ("///Sfgx" ;"//fx/gx") ("///Bfgx" ;"/f/gx") ("///Cfgx" ;"//fxg") ("////Dcfgx" ;"//c/fx/gx") ("////Ecfgx" ;"/c//fxg") ("////Fcfgx" ;"/c/f/gx") ("/Yx" ;"/x/Yx") ("//Wfx" ;"//fxx") ("//Txf" ;"/fx")) / optimization forms O:(t`$')''+(("//SKK" ;,"I") ("//S/KpI" ;,"p") ("//SI/Kp" ;"/Tp") ("//SpI" ;"/Wp") ("//S/Kp/Kq" ;"/K/pq") ("//S/Kp//Bqr" ;"///Dpqr") ("//S/Kpq" ;"//Bpq") ("//S//Bpq/Kr" ;"///Epqr") ("//Sp/Kq" ;"//Cpq") ("//S//Bpqr" ;"///Fpqr")) / optimize/reduce e:{t_@{{f[y;z;x]}/[y;*x;x 1]}[x]/t y} f:{:[(@z)|~(4:z)_in 0 -4;z;_n~d:g[.();x;z:_f[x;y]'z];z;h[d;y]]} g:{:[_n~x;x;~@y;:[~@z;_f/[x;y;z]];y _in V_;@[x;y;:;z];@y;:[y~z;x]]} h:{:[4:y;{:[1=#x;*x;x]}@i/[y,();!x;x[]];_f[x]'y]} i:{@[x;&x~\:y;:[;z]]} / represent r:{,/{:[4=4:x;$x;1!" ",5:x]}'x} q:e[O]l p@ q"///\\x\\y\\z//*//+x y z 10 20 30" q"//\\x\\y//+x y[2 3][4 5]" \ Ix = x / Identity Kcx = c / Cancellator Sfgx = fx(gx) / Distributor Bfgx = f(gx) / Compositor Cfgx = fxg / Permutator S'cfgx = c(fx)(gx) / S' C'cfgx = c(fx)g / C' B*cfgx = c(f(gx)) / B* Yx = x(Yx) / Fixpoint C:(("Ix" ;,"x") ("Kcx" ;,"c") ("Sfgx" ;"fx(gx)") ("Bfgx" ;"f(gx)") ("Cfgx" ;"fxg") ("Dcfgx" ;"c(fx)(gx)") ("Ecfgx" ;"c(fx)g") ("Fcfgx" ;"c(f(gx))") ("Yx" ;"x(Yx)") ("Wfx" ;"fxx") ("Txf" ;"fx"))