On Wednesday 18 May 2005 17:57, Matt Fowles wrote:
> All~
>
> What does the reduce metaoperator do with an empty list?

Here is the last answer from Ken Iverson, who invented reduce in 
the 1950s, and died recently.
file:///usr/share/j504/system/extras/help/dictionary/intro28.htm
Identity Functions and Neutral

The monads 0&+ and 1&* are identity functions, and 0 and 1 are 
said to be identity elements or neutrals of the dyads + and * 
respectively. Insertion on an empty list yields the neutral of 
the dyad inserted. For example:

   +/ i.0         +/''           +/0{. 2 3 5
0              0              0

   */i.0          */''           */0{. 2 3 5
1              1              1

> my @a;
> [+] @a; # 0? exception?
> [*] @a; # 1? exception?
> [<] @a; # false?
> [||] @a; # false?
> [&&] @a; # true?
>
> Also if it magically supplies some correct like the above, how
> does it know what that value is?
>
> Thanks,
> Matt

The page
file:///usr/share/j504/system/extras/help/dictionary/d420.htm
gives examples, unfortunately not easily readable ones.

"If y has no items (that is, 0=#y), the result of u/y is the 
neutral or identity element of the function u. A neutral of a 
function u is a value e such that x u e â x or e u x â x, for 
every x in the domain (or some significant sub-domain such as 
boolean) of u .  This definition of insertion over an argument 
having zero items extends partitioning identities of the form 
u/y â (u/k{.y) u (u/k}.y) to the cases k e. 0,#y .

"The identity function of u is a function ifu such that ifu y â 
u/y if 0=#y ."

[The following table is greatly simplified by listing identity 
elements rather than identity functions. Some are only left 
identities, and some only right identities.]

Identity element        For
 
0                               <  >  +  -  +.  ~:  |  (2 4 5 6 b.)
1                               =  <:  >:  *  %  *.  %:  ^  !  (1 9 11 13 b.)
_                               <.
__                              >.
''                              ,
[and a few more that I will not explain here]

Glossary
J       Description
+.      or
~:      objects are identical
|       remainder, defined so that 0|N is N
b.      Boolean functions from table 
<:      less than or equal, restricted to Booleans here 
                (1<:0 is 0, 1<:1 is 1)
>:      greater than or equal, restricted to Booleans here
*       times, restricted to Booleans here
%       divide
*.      and
%:      root
^       exponential
!       combinations
<.      minimum
>.      maximum
''      empty vector, list of length 0
,       catenate, join lists
_       infinity
__      negative infinity

So (_ <. N) is N, as is (__ >. N).
All of these functions are defined in detail but quite tersely in 
the J Dictionary, indexed on the page
file:///usr/share/j504/system/extras/help/dictionary/vocabul.htm
For examuple, the Boolean function b. is defined on the page 
file:///usr/share/j504/system/extras/help/dictionary/dbdotn.htm

-- 
Edward Cherlin
Generalist & activist--Linux, languages, literacy and more
"A knot! Oh, do let me help to undo it!"
--Alice in Wonderland
http://cherlin.blogspot.com

Reply via email to