I'm curious about a decision made in the definition of u^:(<m) . The
Vocabulary page for ^: at http://www.jsoftware.com/help/dictionary/d202n.htm
defines the case thus:
2081 235 qdoj '^:'
If n is boxed it must be an atom, and u^:(<m)
<==> u^:(i.m) y if m is a non-negative integer
what I want to know is: why is it not <==> u^:(i.m+1) ?
Purely from the perspective of notation, I would expect f^:(<3) to be "the
same as f^:3, but including intermediate results". Or, equivalently, "all the
powers of f up to _and including_ 3". Put another way, would expect the
last item of u^:(<m) to match u^:m (modulo fills).
Another factor influencing my expectation is the treatment of infinite m .
As it stands, u^:(<_) gives all the intermediate results up to _and
including_ the convergent point k of u . That is, the last item of
u^:(<_) y is the limit of u on y , not result of the penultimate
functional power. To put it another way, if i._ were legitimate J, without
the additional specification:
2326 271 qdoj '^:'
<==> u^:(i.k) y if m is _ or '' , where k is the smallest
positive
integer such that (u^:(k-1) y) -: u^:k y
the Vocabulary page for ^: would be incorrect; the last item of f^:(<_) y
would be f^:(_-1) y (A). So, my question could be phrased: why
(theoretically) require the special case? But the is better stated as above:
What are the advantages of defining
u^:(<m) <==> u^:(i.m )
instead of
u^:(<m) <==> u^:(i.m+1)
?
I suspect that even if the latter language is superior (I won't claim it is),
there's probably too much extant code which relies on the former to change it.
But I am curious as to why the former was chosen.
-Dan
(A) We could "fix" this by retaining the quoted specification for infinite m
but substituting +1 for -1 .
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm