[racket] Units/measures library

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Thu Nov 17 10:11:34 EST 2011

On Nov 17, 2011, at 9:38 AM, José Lopes wrote:

> Hello,
> I am working with architects, therefore, I am interested in defining several
> length units (e.g., metre, millimetre and so on) so that they can
> create geometry using the units that are more appropriate for the
> problem at hand. Arithmetic operators are also important and conversion
> functions as Matthias mentioned.
> I also agree with Stephen, F# is a good source of inspiration.
> However, what would be really great (for my work at least :) ) was if arithmetic
> operators worked transparently both with simple numbers (i.e., numbers
> without units) and numbers with units. Because otherwise I am going to have
> to load several of my functions with dispatch code to deal with simple and unit numbers appropriately.

Eminently doable for some value of 'eminently'. 

> Regards,
> José
> On 17-11-2011 21:59, Stephen Bloch wrote:
>> On Nov 17, 2011, at 8:06 AM, Matthias Felleisen wrote:
>>> I can imagine two things at least:
>>> 1. a conversion library with functions such as feet->meter and celsius->fahrenheit and grams->ounces.
>>> 2. a refined version of TR that statically checks units.
>>> I assume Jose was interested in the first -- Matthias
>> I would be much more interested in the latter; the former is a first-semester student exercise.
>> Microsoft's F# language has unit support in its type system.  I don't remember many of the details, but it seemed like the sort of thing that could easily be implemented in Racket.  Define a type that combines a number with a "unit", which is a ratio of monomials in unit symbols (e.g. g-cm^2/sec^2); define arithmetic operators that work correctly on these, including raising an error when somebody tries to add or subtract things with different units; define input and output formats for this type.  The checking wouldn't necessarily have to be static, as far as I'm concerned.  I don't know whether it would be feasible to apply previously-written mathematical functions (e.g. for/add, for/multiply, max, min) to these unitized quantities, or whether someone would need to re-implement those things using the unitized arithmetic.
>> Stephen Bloch
>> sbloch at adelphi.edu
>> _________________________________________________
>>   For list-related administrative tasks:
>>   http://lists.racket-lang.org/listinfo/users
> -- 
> José António Branquinho de Oliveira Lopes
> 58612 - MEIC-A
> jose.lopes at ist.utl.pt
> _________________________________________________
> For list-related administrative tasks:
> http://lists.racket-lang.org/listinfo/users

Posted on the users mailing list.