r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

Oldes
15-May-2007
[7952]
so forget it:-) maybe I should stop working today
Henrik
15-May-2007
[7953x2]
does anyone have a function to calculate the age of a person exactly? 
I need maximum precision in that his birthday is correct every time.
including leap years
btiffin
15-May-2007
[7955]
There is a rebol.org script that prints age to the second.  New user 
wrote it so it

assumes you were born at midnight.   %now.r  Probably needs a pro 
touch up.
Henrik
15-May-2007
[7956]
well, it simply subtracts dates
Gregg
15-May-2007
[7957]
Where does it produce incorrect results? Do you have a good test 
case or two. I think stuff I've done is based on the same simple 
concept.
Henrik
15-May-2007
[7958]
hmm... it looks like REBOL will do it right as long as you don't 
take leap years into account
Maxim
15-May-2007
[7959x2]
the question is, how do handle people born on the 29th of feb.
even if you have number of days, its quite hard to then figure out 
the number of years/days correctly... especially when displaying 
them.
Gregg
15-May-2007
[7961]
days-between: func [date-1 [date!] date-2 [date!]][
    return date-1 - date-2
]

persons-age: func [
    "Return a persons age, in years."
    b-day [date!]
    /precise   "Include decimal portion of age."

    /days      "Return result as how many *days* old the person is."

    /yrs-days  "Return result as number of years and days (2 item block)."

    /on        "Use alternate date instead of current date, to figure 
    age."
        date
    /local result
][
    date: any [date now]
    if days     [return days-between date b-day]
    if precise  [return (days-between date b-day) / 365.25]

    if yrs-days [return compose [(to-integer date - b-day / 365.25)(date 
    - b-day // 365.25)]]

    ; otherwise, take away 1 year if their birthday hasn't come yet this 
    year.
    return date/year - b-day/year - either any [
        (date/month > b-day/month) all [

            (date/month = b-day/month)(date/day >= b-day/day)]] [0][1]
]
Henrik
15-May-2007
[7962]
the problem is to hit their birthdate correctly, so 38.9 turns to 
39 exactly on their birthdate
Gregg
15-May-2007
[7963]
round/down :-)
Henrik
15-May-2007
[7964x3]
gregg, yes, but still leap year to take into account
wow, it seems to do it correctly. at least for the dates tested here
gregg, is it yours? I need to credit it.
Gregg
15-May-2007
[7967x2]
Yes, it's mine. Well, either it's mine or I forgot to keep a credit 
for it, which I'm usually pretty good about. :-)
It has my birthday in the tests, so I'm guessing I wrote it.
Henrik
15-May-2007
[7969x2]
seems to be missing by a day here...
oh, well. I'll see what the customer says :-) many thanks!
Gregg
15-May-2007
[7971]
Send me test cases that fail and I'll try to make it right.
Henrik
15-May-2007
[7972]
I will. Perhaps you should add it to the code snippet check list?
Gregg
15-May-2007
[7973]
Feel free.
Henrik
15-May-2007
[7974]
done
Gregg
15-May-2007
[7975]
Thanks.
Geomol
17-May-2007
[7976x2]
Is there a loader for Targa images (.tga)? Does it require a license 
to support the Targa format? Does anybody know?
I need a REBOL->C converter. I spend hours programming in C to do 
something, it'll take minutes to do in REBOL.
Sunanda
17-May-2007
[7978]
R3 runs as a DLL......Car showed his basic development C script at 
DevCon.

It was abouy 12 lines of C, the heart of it being a call to REBOL, 
passing a string to be DOne.
That may be all you need to run REBOL from C with R3.
Geomol
17-May-2007
[7979x2]
It's not actually that, I'm after. In this project I need all the 
speed, I can get, so I do it in C, but it's a lot of time spent. 
I was thinking about a dialect in REBOL, that can be converted to 
C and compiled. That way it should be possible to produce C source 
a lot faster, than I do now.
Something like:
[img: load-image/tga %gfx/image.tga]

The converter should then convert that to a lot of C source, that 
I can compile with gcc.
Rebolek
17-May-2007
[7981]
I wrote a dialect that is converted to C and compilable. It just 
covers basic math operations though, as that was all I needed. No 
pointers stuff and so on. But if you're interested to expand it, 
I can publish it somewhere (not sure how ugly the code is, didn't 
touch that in year or so).
Geomol
17-May-2007
[7982]
Rebolek, thanks for the offer, but I haven't got the time right now. 
Maybe it'll be a good idea to take this idea up, when R3 is released 
with rebcode. Then it'll be the right time to check the possibilities 
regarding performance.
Gabriele
17-May-2007
[7983]
geomol, if you don't have much time, try D, or Scheme, or any other 
high level compiled language. they're still better than C :) otherwise... 
you'll probably have to code it yourself.
Jerry
17-May-2007
[7984]
D is a good language.
btiffin
17-May-2007
[7985]
See http://www.rebol.org/cgi-bin/cgiwrap/rebol/documentation.r?script=view-html.r
for
a little blurb on D.  It is a good language...
TimW
17-May-2007
[7986]
Is there a way to change the format of to-date?  In oracle you can 
specify to-date(field, 'MM-DD-YYYY') and I need to read in a lot 
of dates that are in MM/DD/YYYY, but to-date assumes it's DD/MM/YYYY. 
 I also have dates that are Month DD, YYYY.
Gregg
17-May-2007
[7987x2]
This will cover mm-dd-yyyy format, but you'll need to add another 
support func for the last format you posted:
parse-simple-date: func [
	"Parse a string containing a date value; return a date! value."
    date [any-string!]

    /def-day def-d [integer! word!] "Default day for mm/yyyy format. 
    Number or 'last."
    /local dig sep d m y set-def-day tmp-dt
][
    dig: charset [#"0" - #"9"]
    sep: charset " -/."
    set [d m y] none
    set-def-day: does [
        d: any [
            all [integer? def-d  def-d]
            all [
                'last = def-d
                foreach fld [d m y] [set fld to integer! get fld]
                tmp-dt: subtract make date! reduce [1 m + 1 y] 1
                tmp-dt/day
            ]
            1
        ]
    ]
    ; assuming mm/dd/yy or mm/yy format
    ; Do we really want to use PARSE/ALL here?
    either parse/all date [

        [copy m 1 2 dig  sep  copy d 1 2 dig  sep  copy y 1 4 dig]
        | [copy m 1 2 dig  sep  copy y 1 4 dig  (set-def-day)]
    ][
        foreach fld [d m y] [set fld to integer! get fld]
        ; add century if necessary; window from 1926-2025
        if y < 100 [y: add y pick [1900 2000] y > 25]
        ; swap day and month if it makes sense
        if all [m > 12  d <= 12] [set [m d] reduce [d m]]
        make date! reduce [d m y]
    ][none]
]


set 'date-val func [
	"Do everything possible to convert a value to a date."
    date

    /def-day d [integer! word!] "Default day for mm/yyyy format. Number 
    or 'last"
    /local res
] [
    if any-string? date [trim date]
    any [
        all [date? date  date]
        parse-simple-date/def-day date any [d 1]
        attempt [to date! date]
    ]
]
TimW
17-May-2007
[7989]
Thanks!
Geomol
17-May-2007
[7990x2]
D seems to have garbage collection. Then it isn't for this project, 
I'm doing. I can't have the computer having hiccups, because the 
garbage collector does some cleanup.
I'm ok with C for now. I was just pointing out, that REBOL dialects 
producing C source could be very useful for some kinds of programming 
problems. When I got the time ... ;-)
btiffin
17-May-2007
[7992x2]
Geomol;  You can use std.gc.disable() for smooth runtime, and std.gc.enable() 
when 
and or if you want to turn the garbage collector back on.
See http://www.digitalmars.com/d/memory.html#realtime
Geomol
17-May-2007
[7994]
They've thought about it! :-) Neat.
btiffin
17-May-2007
[7995]
Yeah, my exposure to D is less than a month old, but I'm becoming 
quite a fan of
Walter.
Geomol
17-May-2007
[7996]
How widely spread is it? Compiler for OS X, handhelds, alternative 
OSs? Does it speak with OpenGL and GLUT? What support of sound?
btiffin
17-May-2007
[7997x2]
Umm, my exposure is still cursory.  But it's been working great under 
GNU/Linux.

Samples are sparse, but building.  iirc, the first release was January 
2007.
OS X support with through a gcc front/back end
Supports standard C lib conventions.  Links to all libs if I read 
that part correctly.  There

may be some import sequences to work out if it hasn't been done already.
TimW
18-May-2007
[7999x2]
Can someone explain why this function returns none?
foo: func[a[integer!]][switch[a][ 1["one"] 2["two"]]]  If you change 
it to switch[2] it will always return "two", so why doesn't the switch 
work when using a parameter?
Graham
18-May-2007
[8001]
switch value [ val1 [ ] val2 [ ] ]
and not switch [ value ]