Hi chaz,

I think that using parse is overkill in this situation. Here's pretty
much your code which replaces the parse rule and the use of parse by
using the following construct:

foreach line table [
  set [unit singular plural] line

Here's the complete modified code:

REBOL []

table: [
    [31557816   "year"                     ]
    [2629818    "month"  "rewarding months"]
    [86400      "day"                      ]
    [3600       "hour"    "enjoyable hours"]
    [60         "minute"                      ]
    [1          "second"                      ]
]

time: 2629818 + 2629818 + 2629818 + 3600 + 3600 + 15
; I expect the output "3 rewarding months 2 enjoyable hours 
; 15 seconds"

result: ""

foreach line table [
  set [unit singular plural] line
  if not plural [ plural: rejoin [singular "s"] ] 
  size: time / unit

; We want to take the integer part of size and compare it to 1 to 
; determine if we need to use the singular or plural form.

  if (to-integer size) > 0 [
    result: rejoin [
      result size " " 
      either size = 1 [singular][plural] 
      " "
    ]
    time: time // unit
  ]
]
print result

chaz wrote:
> 
> I'm trying to figure out how to implement what I think that code does.
> Unfortuately I get an error.
> 
> It looks like it's trying to parse a series of blocks. The blocks are in
> the form of units of time measured in seconds, singular form of the unit,
> and the plural form of the unit.
> 
> >    table.each {|unit, sing, plur|
> >      plur = sing+'s' if !plur;
> 
> If the plural is absent, we assume that it is formed by adding s to the
> singular form.
> 
> For instance the plural of "year" is "years", but perhaps, as in some
> contrived situation like this, the plurals cannot be formed this way.
> 
> table: [
>     [31557816   "year"                     ]
>     [2629818    "month"  "rewarding months"]
>     [86400      "day"                      ]
>     [3600       "hour"    "enjoyable hours"]
>     [60         "minute"                      ]
>     [1          "second"                      ]
> ]
> 
> time: 2629818 + 2629818 + 2629818 + 3600 + 3600 + 15
> ; I expect the output "3 rewarding months 2 enjoyable hours
> ; 15 seconds"
> 
> result: ""
> rule: [
>    set unit integer!
>    set sing string!
>    set plur [none! | string!]
> ]
> 
> foreach line table [
> 
> ; parse returns false if there is no plural entry
> 
> if not [parse line rule] [plur: rejoin [sing "s"]]
> 
> ; Unfortunately the error occurs here
> 
> size: time / unit
> 
> ; We want to take the integer part of size and compare it to 1 to
> ; determine if we need to use the singular or plural form.
> 
> if [to-integer size > 0][result: rejoin [result size " " either [size =
> 1][sing][plur]] " "]
> time: time // unit
> ]
> 
> print result
> 
> chaz
> 
> At 01:25 PM 12/19/00 -0800, you wrote:
> >Hi Galt,
> >
> >Ruby predates REBOL by a year or two (I've been on the Ruby mailing list
> >much longer than REBOL's).
> >
> >IMHO you really cannot compare Ruby to REBOL. From a syntactic point of
> >view Ruby (to me) is extremely cumbersome and cryptic. It is intended as
> >a purely object oriented scripting language and reminds me of a mixture
> >of Java and PHP. Here is a code sample submitted by Steve to the Ruby
> >mailing list:
> >
> >    #! /usr/bin/env ruby
> >    # Given the number of seconds, convert to English description
> >
> >    table = [ [ 31557816, 'year'    ],
> >              [  2629818, 'month'   ],
> >              [    86400, 'day'     ],
> >              [     3600, 'hour'    ],
> >              [       60, 'min'     ],
> >              [        1, 'sec'     ] ]
> >
> >    result = ""
> >
> >    time   = ARGV[0].to_i
> >    table.each {|unit, sing, plur|
> >      plur = sing+'s' if !plur;
> >      size = time / unit
> >      if size > 0
> >        result += "#{size} #{(size == 1) ? sing : plur} "
> >      end
> >      time %= unit
> >    }
> >
> >    puts result
> >--
> >
> >[EMAIL PROTECTED] wrote:
> >>
> >> I have been away from the list for a while,
> >> so forgive me if this has already been hashed to death.
> >>
> >> I just a few days ago ran across references to Ruby,
> >> a newish programming language invented by a
> >> man in Japan (Matsumoto something...) and it seems
> >> to have many features similar to Rebol.
> >>
> >> http://www.ruby-lang.org/en/
> >>
> >> Anyway, as I was reading about it I started making
> >> a rough comparison to rebol. Weird how similar
> >> the names are. Anyway, let's see...
> >>
> >> They both have good web support, are interpreted,
> >> support advanced data structures, have automatic garbage collection,
> >> have context/closures, error-handling.
> >>
> >> Platform
> >>   Rebol ++ great, easy install, works on lots of platforms
> >>   Ruby - oriented towards unix, can work on windows with effort.,
> >>     only works in places like unix, and windows and dos and a few
> >>     other platforms which can cobble together unix-like behavior
> >>     with various add-on support modules.
> >>
> >> Multithreading
> >>   Rebol - I know the apache server has some threading, but not basic reb.
> >>   Ruby + good support for threads and semaphores
> >>
> >> Grpahics
> >>   Rebol + graphics available now, no charge, and platform indep., easy
> to use
> >>   Ruby - still don't have it built in, only some links to tk and other
> >>
> >> unix libs Open Source
> >>   Rebol - no open source
> >>   Ruby + strong open source community
> >>
> >> OOP
> >>   Rebol ? rebol objects don't have real inheritance, you can do useful
> stuff,
> >>     but they often just act as nice containers.
> >>   Ruby + everything is an object, this is real oop, albeit
> single-inheritance.
> >>     (personally, I don't care that much about oop, but if you do, you
> will like Ruby's oop)
> >>
> >> Performance
> >>   Rebol ? Performance boosted at the loss of continuations and other
> niceties.
> >>   Ruby ?- Probably has perf. not quite as good, but still pretty good, and
> >>     they haven't jettisoned continuations, which is cool.
> >>
> >> Packages - modules for large sw dev.
> >>   Rebol ? I haven't been following, but Rebol's are improving all the time
> >>   Ruby + they seem to have good support for modules/libs/namespaces
> >>
> >> Size
> >>   Rebol ++ Nice and small and easy to install
> >>   Ruby ? Not sure how big, but probably not small like Rebol.
> >>
> >> Syntax
> >>   Rebol + I like Rebol's syntax, don't suffer from endless parentheses
> and ;
> >>   Ruby -? Pretty good syntax, but lots of "end" keywords everywhere
> >>
> >> Closures
> >>   Rebol - Boo, hoo, I miss them
> >>   Ruby + Yeah, they still got 'm
> >>
> >> Web Protocols
> >>   Rebol + built in, could often use better doc. and examples,
> >>     and some stuff like support for cookies is still lame addon
> >>   Ruby ? seem to have good stuff, but as external package
> >>     it is not quite as built in and ready to go, but still not bad.
> >>
> >> Object Serialization (saving and sending 'em)
> >>   Rebol - nothing on the map yet, and it would add a whole new
> >>      dimension, but problems as the definition of "binary" data
> >>      and other types is not defined.
> >>   Ruby + apparently, it is supposed to have good support for
> >>      serializing objects, which is pretty cool.
> >>
> >> List as fundamental data element
> >>   Rebol + has them built in, and very useful with good performance.
> >>   Ruby ?- has great object support, but list support is an
> >>      afterthought not an inherent tool.
> >>
> >> Ability to Link Foreign Code
> >>     Rebol ? can do somewhat with Rebol/Command only?
> >>     Ruby + supposed to excel at this
> >>
> >> Perl-like features
> >>   Rebol + doesn't have 'em, I don't like perl much
> >>   Ruby ?- partly Ruby was invented as a much better perl,
> >>     has perl-like features
> >>
> >> Built-in utility features
> >>   Rebol +/- platform isolation, but then you can't access some file
> attributes, etc.
> >>   Ruby + supposed to be strong at this, although very unix-oriented
> >>
> >> Cost
> >>   Rebol +? Not expensive, basic rebol and /view are free!
> >>   Ruby + Hard to beat free
> >>
> >> Globalization support
> >>   Rebol ? I always wondered why Rebol was not designed for an
> >>      international global world. Only ascii support apparently at this
> time.
> >>   Ruby + Partly because it's inventor is Japanese, this language is
> >>      supposed to have excellent support built-in for handling lots of
> >>      languages way beyond just plain 256 ascii codes.
> >>
> >> Well, you know I am extremely fond of Rebol,
> >> but it looks like Ruby has the edge in a few areas.
> >> While it is harder to install and runs on fewer platforms,
> >> lacks built-in graphics and simple installation, it does
> >> however have full oop, perl (yuck), good library/ext packages,
> >> international lang. support, serialization, and closures,
> >> and free open source with strong user community.
> >>
> >> I am sure some of you have run into this language,
> >> what do you think of Rebol vs. Ruby and the future?
> >>
> >> Note - I am just curious, not interested in flame-fights,
> >>
> >> and would like to know what some of the intelligent folks on
> >> the list here think about it.
> >>
> >> -Galt
> >>
> >> --
> >> To unsubscribe from this list, please send an email to
> >> [EMAIL PROTECTED] with "unsubscribe" in the
> >> subject, without the quotes.
> >--
> >To unsubscribe from this list, please send an email to
> >[EMAIL PROTECTED] with "unsubscribe" in the
> >subject, without the quotes.
> >
> >
> 
> --
> To unsubscribe from this list, please send an email to
> [EMAIL PROTECTED] with "unsubscribe" in the
> subject, without the quotes.
-- 
To unsubscribe from this list, please send an email to
[EMAIL PROTECTED] with "unsubscribe" in the 
subject, without the quotes.

Reply via email to