The last line applies to my thoughts not yours. As someone else indicated, I think we should experiment with 'dimension' (distance, time) vs 'units' (meters vs yards, seconds vs hours). This separation injects a hierarchy that could be useful.
I'd really like to see some experimentation here because people haven't explored the space much and Racket could help explore a #lang metric/racket and even #lang typed/metric/racket. -- Matthias On Oct 26, 2013, at 11:36 AM, Matthias Felleisen wrote: > > 1. I would hope that some generics might help here. > 2. I see a need for struct mixins here because meter isn't a refinement per > se but some 'attribute'. Then you could mixin several different units and I > may have both m and m-1. > > Data representation not fully thought thru. -- Matthias > > > > > > On Oct 26, 2013, at 11:26 AM, Laurent wrote: > >> How would you represents quantities like 2 kg.m^2/s^-2 with that? >> And how would you convert from mi/h to m/s? >> >> Anyway, I've started adding in some converters: >> https://github.com/Metaxal/measures/blob/master/converters.rkt >> >> Some more to come, but I may not be able to work on it for very long for now. >> >> Laurent >> >> >> On Sat, Oct 26, 2013 at 5:05 PM, Matthias Felleisen <matth...@ccs.neu.edu> >> wrote: >> >> >> Wouldn't we want something like this: >> >> #lang racket >> >> (module+ test (require rackunit)) >> >> (struct distance (value) #:transparent) ;; this should be abstract >> (struct yard distance () #:transparent) >> (struct meter distance () #:transparent) >> >> ;; distance distance -> distance >> >> (module+ test >> (check-equal? (d+ (yard 1) (yard 2)) (yard 3)) >> (check-equal? (d+ (yard 1) (meter 2)) (meter (+ .9 2))) >> (check-equal? (d+ (meter 1.8) (yard 1)) (yard (+ 2.0 1))) >> (check-equal? (d+ (meter 2) (meter 1)) (meter 3))) >> >> (define (d+ d1 d2) >> (match (list d1 d2) >> [(list (struct yard (value)) (struct yard (value2))) (yard (+ value >> value2))] >> [(list (struct yard (value)) (struct meter (value2))) (meter (+ >> (yard->meter value) value2))] >> [(list (struct meter (value2)) (struct yard (value))) (yard (+ >> (meter->yard value2) value))] >> [(list (struct meter (value)) (struct meter (value2))) (meter (+ value >> value2))])) >> >> ;; distance distance-constructor -> distance >> >> (module+ test >> (check-equal? (conversion (yard 3) meter) (meter (* 3 .9)))) >> >> (define (conversion x d) >> (match x >> [(struct yard (y)) (if (eq? yard d) x (meter (yard->meter y)))] >> [(struct meter (y)) (if (eq? yard d) (yard (meter->yard y)) x)])) >> >> >> ;; auxiliaries >> (define (yard->meter v) (* .9 v)) >> (define (meter->yard v) (/ v .9)) >> >> -- Matthias >> >> >> >> On Oct 26, 2013, at 7:20 AM, Laurent wrote: >> >>> Ok, so I just hacked together a small lib for handling numbers with unit >>> symbols and exponents: >>> >>> Quick example: >>> > (measure->value >>> (m* '(18 s) >>> '(1600 km (h -1)) >>> '(1000 m (km -1)) >>> '(1/3600 h (s -1)))) >>> '(8000 m) >>> >>> You can get it with: >>> $ raco pkg install measures >>> or from the File menu in DrRacket, if you have a recent version of Racket >>> (strictly > 5.3.6). >>> >>> Examples and details here: >>> https://github.com/Metaxal/measures >>> >>> HTH, >>> Laurent >>> >>> >>> On Fri, Oct 25, 2013 at 12:51 AM, Alvin Schatte <alvinscha...@skytex.net> >>> wrote: >>> Is there a library or package that combines numbers and their operations >>> with dimensions that may be associated with them? >>> Alvin Schatte >>> >>> ____________________ >>> Racket Users list: >>> http://lists.racket-lang.org/users >>> >>> >>> ____________________ >>> Racket Users list: >>> http://lists.racket-lang.org/users >> >> > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users