The "distracting teaser" Cap [: acts as a "zero element" which removes the left branch of the diagrams for fork found in Dictionary F. Trains. Please see those diagrams:
http://www.jsoftware.com/docs/help701/dictionary/dictf.htm I read [: g h as "the g of h", using "the" rather than "whistle" as my name for Cap. We have become accustomed to 0 which also has a "watch out!" function; let us become accustomed to Cap. --Kip Murray Sent from my iPad On May 12, 2013, at 1:14 PM, Jose Mario Quintana <[email protected]> wrote: > “It breaks my heart to replace all the Caps with Ats! > > You change a nice right to left tacit expression back to a left to right > parenthesized expression.” > Linda, I meant no harm :) but I read and write lines left to right. From my > vantage point [: has dual personalities: a whistle-blower and a teaser; I > am fine with the former but I cannot stand the latter. Moreover, too many > teasers can hide a whistle-blower as in your “too many caps” illustration: > > ',{:+ [: {:}:y'(13 : ) > [: , [: {: [: + [: [: [: {: }: > In the good old days, from my perspective, @: was used instead of [: and > the whistle-blower would have been as visible in the tacit as it is in the > explicit expression. > > “Once you found a tacit expression for a block, wouldn't you use it in next > definition? > > ' }. (<:0{x) |. y' (13 :) NB. Finding a tacit form for the for block... > [: }. ] |.~ [: <: 0 { [“ > > I read the last line more or less as follows: trigger a domain error, just > kidding; forget the usual fork interpretation, make the middle verb to act > monadic-ally on the ending verb; so, drop the... trigger a domain error, > just kidding; forget the usual fork interpretation, make the middle verb to > act monadic-ally on the ending verb; so, decrement the first item on the > left (argument). > > I always get rid of the distracting teasers; I tried to use them for a > while but I gave up. Personally, I like simplicity and consistency and I > have not found any compelling reason to keep any teaser in any context. > > > > > > On Sat, May 11, 2013 at 2:58 AM, Linda Alvord <[email protected]>wrote: > >> Maybe this illustrates where "too many caps" comes from. >> >> ',{:+ [: {:}:y'(13 : ) >> [: , [: {: [: + [: [: [: {: }: >> >> It breaks my heart to replace all the Caps with Ats! >> >> You change a nice right to left tacit expression back to a left to right >> parenthesized expression. >> >> Is it possible to improve on how the expression above inserts the Caps? >> >> Linda >> >> -----Original Message----- >> From: [email protected] [mailto: >> [email protected]] On Behalf Of Jose Mario Quintana >> Sent: Thursday, May 09, 2013 6:26 PM >> To: [email protected] >> Subject: Re: [Jprogramming] rosettacode >> >> Skip, I finally was able to take a look at your version. The following >> should be a series of equivalent definitions of your version. I do not code >> explicitly thus the control words are alien to me but they probably are >> correct: >> >> jose1=: 4 : 0 >> k =. y - 1{x NB. k is the number of "kills" >> L =. i. y NB. L is the position list >> whilst. k =. k-1 do. >> L =. (<:0{x) |. L NB. Rotate by the skip number >> L =. }. L NB. Remove the dead index. >> end. >> ) >> >> Substituting L in the first line of the whilst block into the second line, >> >> jose10=: 4 : 0 >> k =. y - 1{x NB. k is the number of "kills" >> L =. i. y NB. L is the position list >> whilst. k =. k-1 do. >> L =. }. (<:0{x) |. L NB. Removing the dead index after rotating by the >> skip number >> end. >> ) >> >> Replacing the whilst by a for form, >> >> jose11=: 4 : 0 >> k =. y - 1{x NB. k is the number of "kills" >> L =. i. y NB. L is the position list >> for. i.k do. >> L =. }. (<:0{x) |. L NB. Removing the dead index after rotating by the >> skip number >> end. >> ) >> >> Eliminating L by reusing y, >> >> jose12=: 4 : 0 >> k =. y - 1{x NB. k is the number of "kills" >> y =. i. y NB. L is the position list >> for. i.k do. >> y =. }. (<:0{x) |. y NB. Removing the dead index after rotating by the >> skip number >> end. >> ) >> >> Finding a tacit form for the for block... >> >> '}. (<:0{x) |. y' (13 :) >> [: }. ] |.~ [: <: 0 { [ >> >> Replacing Caps by Ats because Caps are overused! ;) >> >> }.@:(] |.~ <:@:(0 { [)) >> }.@:(] |.~ <:@:(0 { [)) >> >> Replacing the for form by a power form, >> >> jose13=: 4 : 0 >> k =. y - 1{x >> y =. i. y >> x (}.@:(] |.~ <:@:(0 { [))) ^: k y >> ) >> >> Making a one-liner by substituting k and y in the first and second lines >> into the code of the last line, >> >> jose14=: 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' (4 :) >> >> Trying to find a tacit expression, >> >> 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' (13 :) >> 4 : 'x (}.@:(] |.~ <:@:(0 { [)))^:(y - 1{x) i. y' >> >> No, J is not smart enough; not yet anyway. Replacing (y - 1{x) by __ to >> find the form, >> >> 'x (}.@:(] |.~ <:@:(0 { [)))^:__ i. y' (13 :) [ }.@:(] |.~ <:@:(0 { >> [))^:__ [: i. ] >> >> Replacing the offending Cap, >> >> [ (}.@:(] |.~ <:@:(0 { [))^:__) i.@] >> [ }.@:(] |.~ <:@:(0 { [))^:__ i.@] >> >> Consulting the Dictionary for power... Yes, the gerund form fits the bill! >> >> jose15=. }.@:(] |.~ <:@:(0 { [))^:((] - 1 { [)`(i.@])) >> >> 3 7 (jose1 ; jose15) 10000 >> ┌────────────────────────────────┬────────────────────────────────┐ >> │8922 111 930 2691 3850 6154 6624│8922 111 930 2691 3850 6154 6624│ >> └────────────────────────────────┴────────────────────────────────┘ >> >> They compare as follows, >> >> st=. 7!:2@:] ; 6!:2 >> >> 10 st '3 7 jose1 10000' >> ┌──────┬────────┐ >> │133440│0.100217│ >> └──────┴────────┘ >> 10 st '3 7 jose15 10000' >> ┌──────┬────────┐ >> │263808│0.184226│ >> └──────┴────────┘ >> >> The explicit version is leaner and faster but my attitude is to wait for >> the implementation to catch up (I would not bet on it though). Wait! >> Apparently the issue is more complicated than just explicit versus tacit, >> >> ((<10) (((,@<@]) , st) &> ) (('3 7 ' , ] , ' 10000'"_)each @: ;:)) >> 'jose1 jose10 jose11 jose12 jose13 jose14 jose15' >> ┌────────────────┬──────┬────────┐ >> │3 7 jose1 10000 │133440│0.100398│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose10 10000│199104│0.183993│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose11 10000│265152│0.174459│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose12 10000│265152│0.173494│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose13 10000│265728│0.181894│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose14 10000│265920│0.180529│ >> ├────────────────┼──────┼────────┤ >> │3 7 jose15 10000│263808│0.180721│ >> └────────────────┴──────┴────────┘ >> >> This is puzzling to me; then again, I do not know much (to say the least) >> about the performance of explicit code. >> >> >> >> >> On Sat, May 4, 2013 at 1:42 AM, Skip Cave <[email protected]> wrote: >> >>> Very nice Elton and Jose! I had a bug in my explicit formula, as well >>> as having some extra variables I didn't need. So I simplified my >>> formula and changed the index to the "Mayan Way" (zero index). >>> >>> jose1=: 4 : 0 >>> k =. y - 1{x NB. k is the number of "kills" >>> L =. i. y NB. L is the position list >>> whilst. k =. k-1 do. >>> L =. (<:0{x) |. L NB. Rotate by the skip number >>> L =. }. L NB. Remove the dead index. >>> end. >>> ) >>> >>> So now my results match Jose and Elton's tacit versions. >>> >>> 3 4 jose1 20 >>> 19 1 7 12 >>> >>> 5 1 jose1 200 >>> 112 >>> >>> 7 10 jose1 345 >>> 283 287 295 319 72 92 93 137 175 224 >>> >>> Interestingly: >>> >>> Ts '7 10 jose1 345' >>> 0.0028602 6464 >>> >>> Ts '7 10 jose 345' >>> 0.0010386 65664 >>> >>> Ts '3 7 jose1 10000' >>> 0.0823621 133440 >>> >>> Ts '3 7 jose 10000' >>> |stack error: jose >>> | 3 7 jose 10000 >>> >>> Where jose1 is my explicit version, and jose is Elton's tacit version. >>> >>> Elton, I'm trying to parse through your tacit version to understand >>> how it works. Could you break it appart, and explain what is going on in >> there? >>> >>> Is it possible to implement my explicit algorithm in a tacit >>> expression that won't get a stack error with large numbers? >>> >>> Skip >>> >>> >>> On Fri, May 3, 2013 at 7:13 PM, elton wang <[email protected]> wrote: >>> >>>> modified from Jose's recursive form: >>>> >>>> jose =. i.@{:@[`(] | {.@[ + [ $: _1 + ])@.({:@[ < ]) >>> -- >>> Skip Cave >>> Cave Consulting LLC >>> ---------------------------------------------------------------------- >>> 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
