The long and the short of it
This example takes a conventional multi-line J definition and compares it to a tacit form of the same verb. The function is named entree and its definition is m=.>./x i=.<:#x y=.'' z=.y b=.-.+./"1 DC x L0)$.=.$.(i=0)LR L1 $.=.$.(m~:i{x)LR L2 x=.i{z y=.(x(i{b)LR<x),y j=.<:i $.=.L2((j{x)<i{x)LR $ z=.(<(j{z),y)j}z y=.'' i=.j $.=.L0 L2)i=.<:i $.=.L0 L1)i=.<:#x y=.'' m=.<:m $.=.$.(m~:0)LR L0 z=.(x=1)#z z(1=#z)LR 0{z [Editor’s note: the above definition uses labels L0) and the $. sequence control that are no longer supported. In 1995 they were superseded by the if. else. etc. control structures.] This 23-line definition, which includes two defined verbs DC and LR , four conditional and two unconditional branches, and eight local variables, can be replaced by the following six definitions, which contain no branches and no variables. entree =. et@(<"0@[ ,. ]) et=. et0`et1@.ett et0=.i.@0: et1=.mask <@({:@{.,et@}.);.1 ] ett=. *@# mask=.(={.)@:({."1) Both take a depth list left argument, and a list of boxed values as a right argument, and yield a tree with the given depth and values. See the paper From Trees into Boxes, by Steinbrook and McDonnell, in the APL93 conference proceedings for a detailed discussion. |