ã Contributed by Martin Sitte ã Operators ã ¢¢¢¢¢¢¢¢¢ ã General reduce, f/: (f REDUCE) x: { if (1<#x) (0#x) f f REDUCE (1Õx) else if (1=#x) 0#x else if (16>iû(+;ß;*;¤;=;¦;^;-;«;|;<;>;¨;©;Ó;Ä)É<{f}) (1ÕÒx)Òi#7 7 1 1/1 0 ¢Inf Inf else Ù`domain } ã General scan, f\ (inherently inefficient): (f SCAN) x: r Ý (iû¢1+#rûx) do r[i+1]ûf REDUCE (i+2)Ùx ã Scan for associative functions (much more efficient, if applicable): (f SCANAS) x: x Ý (iû¢1+#x Ý yû0#x) do yûx[i+1]ûy f x[i+1] ã General inner product, x f.g y: x (f DOT g) y: { if (0=0Ørûdo (â(î<{f}),'/')@(ÒÒy) x g@0 ¢1 y) 1Ør else f REDUCE@(ÒÒy) x g@0 ¢1 y } ã Alternatively ã if ((`sym©(î<{f}),'/')Å_nl{;`apl}) ã (â(î<{f}),'/')@(ÒÒy) x g@0 ¢1 y ã General outer product, x Ê.f y: x (f JOTDOT) y: x f@0 0 0 y ã All usable with rank, of course. ã Functions ã ¢¢¢¢¢¢¢¢¢ take{x;y}: (iû#xÝrû#Òy) do yûx[i] Ù@(r-i) y ã xÙy for integer list x drop{x;y}: (iû#xÝrû#Òy) do yûx[i] Õ@(r-i) y ã xÕy for integer list x