Bo Jacoby asked:
> Can the expression
> u&(-v)*u&v
> be simplified?
I responded with:
> (*];.0)@:(u&v)
I just realized that my reformulation is actually longer than your original:
u =. !/
v =. i.@:>:
hg0 =. u&(-v)*u&v
hg1 =. (*];.0)@u&v
(-.&' ' ,&# ;:)@(5!:5) HGs =. hg0`hg1 NB. # chars, #
words
10 10
11 10
though not by much. It's also somewhat faster:
5j1 ": (%"1 <./) TS =. 5 ts&> HGs ,L:0 '~ 2000' NB. time-space
comparison on large dataset
2.0 1.0
1.0 1.2
But the question is whether you think the reformulation is worth it for
just a factor of 2. I guess it depends on whether you think "slightly
longer but less redundant" is simpler than your symmetric formulation, and
whether you find ];.0 obscure.
By the way, stylistically I prefer to put the more complex tine of a fork
on the right. Often this allows me to elide parens, but I also think it
scans better:
u&(-v) * u&v
vs
u&v * u&(-v)
Here, we get a gentler introduction to the idea, and then we get to see how
the right tine changed from the "basis". Another indication that a
stylistic rule has merit is if it increases or retains a formula's
simplicity after "algebraic reduction". For example, considering only the
monads (though you're concerned with the dyads), we could express the
second formulation as *&:u&v - . But for the first one we'd have to add
an extra reflex *&:u&v~ - .
-Dan
PS: The fact that J permits algebraic manipulations without even a
reference to data is another reason I enjoy it.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm