<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div><br></div><div>Wouldn't we want something like this: </div><div><br></div><div><div>#lang racket</div><div><br></div><div>(module+ test (require rackunit))</div><div><br></div><div>(struct distance (value) #:transparent) ;; this should be abstract </div><div>(struct yard distance () #:transparent)</div><div>(struct meter distance () #:transparent)</div><div><br></div><div>;; distance distance -> distance </div><div><br></div><div>(module+ test</div><div> (check-equal? (d+ (yard 1) (yard 2)) (yard 3))</div><div> (check-equal? (d+ (yard 1) (meter 2)) (meter (+ .9 2)))</div><div> (check-equal? (d+ (meter 1.8) (yard 1)) (yard (+ 2.0 1)))</div><div> (check-equal? (d+ (meter 2) (meter 1)) (meter 3)))</div><div><br></div><div>(define (d+ d1 d2) </div><div> (match (list d1 d2)</div><div> [(list (struct yard (value)) (struct yard (value2))) (yard (+ value value2))]</div><div> [(list (struct yard (value)) (struct meter (value2))) (meter (+ (yard->meter value) value2))]</div><div> [(list (struct meter (value2)) (struct yard (value))) (yard (+ (meter->yard value2) value))]</div><div> [(list (struct meter (value)) (struct meter (value2))) (meter (+ value value2))]))</div><div><br></div><div>;; distance distance-constructor -> distance </div><div><br></div><div>(module+ test </div><div> (check-equal? (conversion (yard 3) meter) (meter (* 3 .9))))</div><div><br></div><div>(define (conversion x d)</div><div> (match x </div><div> [(struct yard (y)) (if (eq? yard d) x (meter (yard->meter y)))]</div><div> [(struct meter (y)) (if (eq? yard d) (yard (meter->yard y)) x)]))</div><div><br></div><div><br></div><div>;; auxiliaries </div><div>(define (yard->meter v) (* .9 v))</div><div>(define (meter->yard v) (/ v .9))</div></div><div><br></div><div>-- Matthias</div><div><br></div><div><br></div><br><div><div>On Oct 26, 2013, at 7:20 AM, Laurent wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div><div><div>Ok, so I just hacked together a small lib for handling numbers with unit symbols and exponents:<br><br></div><div>Quick example:<br>> (measure->value<br> (m* '(18 s) <br> '(1600 km (h -1))<br>
'(1000 m (km -1))<br> '(1/3600 h (s -1))))<br>'(8000 m)<br><br></div>You can get it with:<br></div>$ raco pkg install measures<br></div><div>or from the File menu in DrRacket, if you have a recent version of Racket (strictly > 5.3.6).<br>
<br></div><div>Examples and details here:<br><a href="https://github.com/Metaxal/measures">https://github.com/Metaxal/measures</a><br><br></div><div>HTH,<br></div><div>Laurent<br></div></div><div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Fri, Oct 25, 2013 at 12:51 AM, Alvin Schatte <span dir="ltr"><<a href="mailto:AlvinSchatte@skytex.net" target="_blank">AlvinSchatte@skytex.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">
<div dir="ltr">
<div style="font-size:12pt;font-family:'Calibri'">
<div>Is there a library or package that combines numbers and their operations
with dimensions that may be associated with them?</div><span class="HOEnZb"><font color="#888888">
<div style="font-size:12pt;font-family:'Calibri'">Alvin
Schatte<br></div></font></span></div></div></div>
<br>____________________<br>
Racket Users list:<br>
<a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div>
____________________<br> Racket Users list:<br> <a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a><br></blockquote></div><br></body></html>