YEAR=:1900 2000 2001 2002 2003 2004 ly=: 13 :'((400|/ y) e. 0 4)#y' ly YEAR 2000 2004 ly ] #~ 0 4 e.~ 400 |/ ]
Is this OK for leap year? Linda -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Roger Hui Sent: Thursday, May 30, 2013 11:55 PM To: Programming forum Subject: Re: [Jprogramming] Dot conjunction in the leap year verb That phrase is "mine" and embodies some history. When I started in APL decades ago I found it amusing to find novel inner products, and the one used to find leap years is ≠.= in APL, not-equal dot equal. The phrase found its way into the J phrase book by translation from APL. There was no @ or @: in APL. Since u . v is defined in terms of @, there is not (and can not) be much of an advantage of . over @ . I suppose @ is more open ended and using . provides more of a hint to the system what you intend to compute. On Thu, May 30, 2013 at 8:39 PM, elton wang <[email protected]> wrote: > Thanks. > Is the any advantage of ~:/ .= over ~:/ @:= here in m11? > > > > ________________________________ > From: Raul Miller <[email protected]> > To: Programming forum <[email protected]> > Sent: Thursday, May 30, 2013 8:35 AM > Subject: Re: [Jprogramming] Dot conjunction in the leap year verb > > > I imagine you are talking about the definition of m11 at > http://www.jsoftware.com/help/phrases/date_time.htm > > In other words: 0: ~:/ .= 4 100 400"_ |/ ] > > For example: > (0: ~:/ .= 4 100 400"_ |/ ]) 1900 2000 2001 2002 2003 2004 > 0 1 0 0 0 1 > > 1900 is not a leap hear, but 2000 is. > > First off, I should perhaps note that this is old - nowadays we would > leave off the "_ from 4 100 400 because it is implied. But that's ok, > either way works: > (0: ~:/ .= 4 100 400 |/ ]) 1900 2000 2001 2002 2003 2004 > 0 1 0 0 0 1 > > Anyways, as I am sure you have already determined, the first step is > to find remainders: > > (4 100 400"_ |/ ]) 1900 2000 2001 2002 2003 2004 > 0 0 1 2 3 0 > 0 0 1 2 3 4 > 300 0 1 2 3 4 > > Also, from a reference manual point of view, here's the definition of > "dot": http://www.jsoftware.com/help/dictionary/d300.htm > > In other words ~:/ .= is like matrix inner product, with addition > being replaced by "not equals" (or "exclusive or") and with > multiplication being replaced by = > > Or, put diferently, ~:/ .= is ~:/@(v"1 _) > > In this case: > (0 (="1 _) 4 100 400"_ |/ ]) 1900 2000 2001 2002 2003 2004 > 1 1 0 0 0 1 > 1 1 0 0 0 0 > 0 1 0 0 0 0 > > (0 ~:/@(="1 _) 4 100 400"_ |/ ]) 1900 2000 2001 2002 2003 2004 > 0 1 0 0 0 1 > > In other words, if the year is divisible evenly by an odd number of > integers from the list 4 100 400 it's a leap year, but if it's > divisible evenly by an even number of those integers it's not a leap > year. > > This corresponds to a nested if structure like this (pseudocode): > > if (year evenly divisible by 4) then > if (year evenly divisible by 100) then > if (year evenly divisible by 400) then > leap year > else > not a leap year > else > leap year > else > not a leap year > > (And, of course, modern cpu instruction piplelines struggle with > conditional statements, so there are some real advantages to avoiding > "if statements". See, for example: > > http://software.intel.com/en-us/articles/branch-and-loop-reorganizatio > n-to-prevent-mispredicts but, also, mathematical equivalences are a > powerful tool of thought.) > > Thanks, > > -- > Raul > > On Thu, May 30, 2013 at 12:23 AM, <[email protected]> wrote: > > Can anyone show me how's the leap year verb work? I am confused on > > the > use of dot. <br/><br/>m11=: 0: ~:/ .= 4 100 400"_ |/ ] NB. Is y a leap > year?<br/>Why does it use ~:/ .= here? Is it the same as ~:/@:= ? > <br/><br/><br/><br/> > > -------------------------------------------------------------------- > > -- For information about J forums see > > http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
