tag:blogger.com,1999:blog-8513438391157777465.post4820721620616441862..comments2023-04-07T05:56:45.278-07:00Comments on Re: Factor: Time Spans for Humansmrjbq7http://www.blogger.com/profile/06842721076008035602noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-8513438391157777465.post-38274026444874998852010-05-19T20:38:34.832-07:002010-05-19T20:38:34.832-07:00Looking forward to reading it.Looking forward to reading it.Jim Mack (1963)https://www.blogger.com/profile/13085577304102700269noreply@blogger.comtag:blogger.com,1999:blog-8513438391157777465.post-36713779723338886012010-05-19T17:36:49.708-07:002010-05-19T17:36:49.708-07:00Thanks for the feedback!
There really is quite a ...Thanks for the feedback!<br /><br />There really is quite a lot going on in my version, and one of the things I like most about Factor is how it encourages making several smaller words that compose nicely into larger functionality, like yours.<br /><br />That reminds me of a post I've been meaning to make about a lesson Slava gave me once about refactoring some Factor code that is often written by beginners to be more idiomatic.mrjbq7https://www.blogger.com/profile/06842721076008035602noreply@blogger.comtag:blogger.com,1999:blog-8513438391157777465.post-47341311946755927652010-05-19T11:15:54.358-07:002010-05-19T11:15:54.358-07:00Thank you for these. I learn something every time...Thank you for these. I learn something every time. I'd like to contribute an alternative. My goal is to learn to read and write in the nested style above, but for now I turn to <br />factoring the problem into smaller parts, in the hope that it becomes dsl-like.<br /><br />USING: assocs combinators formatting kernel make math memoize<br />nested-comments prettyprint qw sequences ;<br /><br />MEMO: set-sizes ( -- seq ) <br /> { 60 60 24 7 52 1 } <br /> qw{ s m h d w y } zip ;<br /> <br />: sets-in ( total setsize remainder-unit -- whole-sets remainder-description )<br /> [ /mod ] dip "%d%s" sprintf ;<br /><br />: while-remaining ( seconds set-pair -- seconds )<br /> over zero? <br /> [ drop ] [ first2 sets-in , ] if ;<br /><br />: collect-set-descriptions ( size-seq seconds -- str ) <br /> [ [ while-remaining ] each drop ] { } make <br /> reverse " " join ;<br /><br />: elapsed-time2 ( seconds -- string )<br /> {<br /> { [ dup 0 < ] [ drop "negative seconds" throw ] }<br /> { [ dup zero? ] [ drop "0s" ] }<br /> [ set-sizes collect-set-descriptions ]<br /> } cond ;<br /><br /><br />123456 elapsed-time2 .<br />! "1d 10h 17m 36s" <br /><br />Does the increase in definitions and libraries used justify this approach?Jim Mack (1963)https://www.blogger.com/profile/13085577304102700269noreply@blogger.com