Operator trace from dfns.dws is a simple and low-tech tool for displaying intermediate results of functions, during the evaluation of an expression. For example, what’s going on here?
(+⌿ ÷ ≢) 1 2 3 4
2.5
We can guess that the above fork is computing the average of the right argument. To see how this works:
)copy dfns trace
...
⍝ Rename to reduce clutter
t ← trace
⍝ Bind each "tine" of the fork with t to see what's happening
(+⌿t ÷t ≢t) 1 2 3 4
≢ 1 2 3 4 => 4
+⌿ 1 2 3 4 => 10
10 ÷ 4 => 2.5
2.5
⍝ But how is that +⌿ reduction evaluated?
(+t⌿ ÷ ≢) 1 2 3 4
3 + 4 => 7
2 + 7 => 9
1 + 9 => 10
2.5
As a second example, what does the atop (~⍷)
do in the following function to remove superfluous '.'
characters from its argument?
{('··'(~⍷)⍵)/⍵} 'squeeze·····me'
squeeze·me
{('··'(~⍷)t⍵)/⍵} 'squeeze·····me'
·· ~⍷ squeeze·····me => 1 1 1 1 1 1 1 0 0 0 0 1 1 1
squeeze·me
…and so forth. Notice how t
can be injected to the right of any of the functions in an expression.
For more examples, see the notes for trace.