At 06:57 PM 1/19/01 -0600, GS Jones wrote:
>Hi, Jeff, Bo, et al
>
>It seems to work at all the "boundary" cases, but please yell if I
>overlooked something.

                 nearly everyone missed something.
                 shall I grade all of us on a curve?

#1) I consider that most of you overlooked a biggie.

Succinct was chosen as a precise word.
It doesn't only mean small or fast or unreadable. (smile)
It particularly doesn't mean "change the spec".  It doesn't matter how fast 
you make it if I must insert an intermediate function to convert what you 
wrote into what would function as a drop-in replacement. You would have to 
benchmark the intermediate too.


I used the word named 'dt (vs tm) as an argument in my example for a 
reason.  I also did not restrict the argument type for a reason.  I was 
passing date!s (not time!s) into it. Specifically I was passing structures 
that would have a /time path or refinement to them.  These were not just 
time paths to things I made up, they had to work with standard rebol return 
values that had a /time refinement.


  In some cases I made a /local dt and copied your argument to the local as in

  myampm: func [ adt /local dt ] [ dt: adt/time
    ... <your code here>
    ]

in order to avoid the intermediate function call overhead.

Here are test cases derived from actual working sections
of the code where the function is used.

     time-ampm modified? %user.r

     time-ampm ( oo: make object! [ time: now ] )

     time-ampm now




#2) most of you did not get the fact that the result was to be fixed width 
(zero padded on the left) -- the clue was in the comment
         ; hh:mm vs [h]h:mm

  This one turned out to be less important as the system I was trying to 
mimic  [remember my reason for starting the "How do I thread(s)" ??? 
]  said fixed width in the spec but in implementation [reality] was 
variable width and not 0 padded!

   this one has a boundary case which wrecks even my own code.

       time-ampm 20-Jan-2001/18:57:53




#3) what about being able to get only what you are interested in?


>this version allows coding by deletion
>since the two parts ...

However, This part of the challenge seems to have been ignored.

In the area of potential refinements, I saw very little in the replies that 
could be easily tweaked return the two separate values (AM PM vs 12 
hrfmt).  I guess it was the excitement of the hunt.

so here you also have a lesson in "coupling and cohesion".  RT is to be 
congratulated in the cohesion of the base date!time! refinements.  I will 
let you each decide how badly you sacrificed coupling in the interest of 
beating a benchmark.


____________________

Overall, I appreciate the effort and
thanks for your participation.

Most of you figured out that there was little I stood to gain by putting up 
my challenge if my own code worked adequately already.

Indeed, I was also trying to make the community (not just RT) aware of 
practical and potential extensions (see 
http://rebol.com/contribution_source.html ) or alternatively, refinements 
to the base time!date! types involved.  (see refinements below)

Being the stickler for orthogonality I am, I noted that REBOL can accept 
12hour format but is not so good at emitting it (or allowing the programmer 
to).

      print  20-Jan-2001/08:57PM

By pointing out so many different ways one can make mistakes at the 
boundaries in emitting it and getting you to come up with a concise 
function that does it all, I make it attractive to be standardized or codified.

If any of you want to resubmit a better and more concise solution (read 
succinct) that RT can consider for a to-ampm (like to-idate) with 
refinements that allow selective inclusion/exclusion of the parts then lets 
hear it!

In the meantime, what if it were just a simple part of the datatypes involved?

As I have watched Rebol evolve,
"being able to get [at] only what you are interested in"
  is a characteristic of the base type support in the language.

    --proposed refinements--

Date Refinements:
     /year -- Returns the year only.
     /month -- Returns the month only.
     /day -- Returns the day of the month only.
     /time -- Returns the time only.
     /zone -- Returns the time zone offset from GMT only.
     /date -- Returns date only.
     /weekday -- Returns day of the week as integer (Sunday is day 7).
     /inampm -- time portion as [h]h:mm:ss[A|P]M,
               variable width hh, first hour is 12 not 0
               can be combined with /time to return time only portion

Time Refinements:
     /hour -- (stet)
     /minute -- (stet)
     /second  -- (stet)
     /ampm -- ante meridiem, returns "AM" or "PM"
     /in12hr -- [h]h:mm:ss, variable width hh, first hour is 12 not 0

example:  {
   ftim: modified? %/databse/srcobjs
   print  ftim/inampm
   print  now/inampm
   }

-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to