Hi. I've been trying to refactor some code to remove repetition. Essentially
I am trying to convert a date of the form { day month year } to a timestamp.
Originally I had something that looks like this

: el-to-tuple-quot ( n acc -- quot )
    '[ dup -rot _ swap nth _ call swap ] ; inline

: aday>tuple ( timestamp num-seq -- timestamp num-seq )
    0 [ >>day ] el-to-tuple-quot call ;

: amonth>tuple ( timestamp num-seq -- timestamp num-seq )
    1 [ >>month ] el-to-tuple-quot call ;

: ayear>tuple ( timestamp num-seq -- timestamp num-seq )
    2 [ >>year ] el-to-tuple-quot call ;

: num-date>timestamp ( num-seq -- timestamp )
    T{ timestamp } swap aday>tuple amonth>tuple
    ayear>tuple drop ;

I decided that the 'a*>tuple' words were unnecessary and could be replaced
with an each call

: el-to-tuple-quot ( n acc -- quot )
    '[ dup -rot _ swap nth _ call swap ] ; inline

: array-to-tuple-quot ( -- quot )
    [ first2 el-to-tuple-quot call ] ; inline

: num-date>timestamp ( num-seq -- timestamp )
    T{ timestamp } swap
    { { 0 [ >>day ] } { 1 [ >>month ] } { 2 [ >>year ] } }
    array-to-tuple-quot each drop ;

However I now get the 'Got a computed value where a literal quotation was
expected; ' error. It works fine when called directly on the listener but
doesn't when running from a vocabulary. I've tried replacing both words that
return quots with their definitions but get the same error. I've also tried
fiddling with the inline calls to see if I can get it to work. Anyone know
what is going on?

Cheers,
Gareth
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Factor-talk mailing list
Factor-talk@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/factor-talk

Reply via email to