Since there are only 14 different calendars,
another possibility is for "calendar" is to index
into a pre-generated array.
----- Original Message -----
From: Roger Hui <[EMAIL PROTECTED]>
Date: Wednesday, May 9, 2007 10:51 am
Subject: Re: [Jgeneral] Generating Calendar Days
> Just because it's a standard utility does not mean
> that it can not be improved. For example:
>
> calendar=: 3 : 0
> a=. ((j<100)*(-100&|){.6!:0'')+j=. {.y
> b=. a+-/<.4 100 400%~<:a
> r=. 28+3,(~:/0=4 100 400|a),10$5$3 2
> r=. ,(-7|b+0,+/\}:r)|."0 1 r(]&:>:*"1>/)i.42
> m=. m,(0=#m=. <:}.y)#i.12
> h=. 'JanFebMarAprMayJunJulAugSepOctNovDec'
> h=. ' Su Mo Tu We Th Fr Sa',:"1~_3(_12&{.)\h
> <"2 m{h,"2[12 6 21$,>(<'') ((r=0)#i.#r)} <"1 [ 3":,.r
> )
>
> The computation on the last line is rather curious.
> Experimentation reveals that it is formatting
> a bunch of dates from 1 to 31 and 0s, with blanks
> replacing 0s. Thus, instead of
> >(<'') ((r=0)#i.#r)} <"1 [ 3":,.r
> you could say one of the following:
> ' ' (I.0=r)}3":,.r
> r{' ',3":1+i.31 1
> (To be fair, I. was probably not available at the
> time the utility was written.) Moreover, r did
> not need to be raveled, and the reshape can
> exploit special code. Thus:
> r=. (-7|b+0,+/\}:r)|."0 1 r(]&:>:*"1>/)i.42
> ...
> <"2 m{h,"2[12 6 21 ($,) r{' ',3":1+i.31 1
>
> m is supposed to be the months in the argument,
> or all months if none are supplied. Instead of
> m=. m,(0=#m=. <:}.y)#i.12
> you could say
> m=. (<:}.y),i.12*1=#y
>
> Other improvements to the verb are possible.
>
>
>
> ----- Original Message -----
> From: [EMAIL PROTECTED]
> Date: Wednesday, May 9, 2007 10:07 am
> Subject: Re: [Jgeneral] Generating Calendar Days
>
> > Devon !
> >
> > It's the code in the ~/j601/system/main/dates.ijs for calendar.
> > Criticizing it is a direct critic of J's standard utilities... ;O)
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm