[racket] Units/measures library
Another approach can be to represent numbers representing an amount of a
unit as a pair or a struct containing both the number and the unit. However,
this would require updates of a number of arithmetic operators. In addition,
read should accept numbers annotated with a unit. Writing them is less of a
problem.
Jos
-----Original Message-----
From: users-bounces at racket-lang.org [mailto:users-bounces at racket-lang.org]
On Behalf Of Neil Van Dyke
Sent: jueves, 17 de noviembre de 2011 23:52
To: Shriram Krishnamurthi
Cc: users at racket-lang.org
Subject: Re: [racket] Units/measures library
Neil Van Dyke wrote at 11/17/2011 05:49 PM:
> Shriram Krishnamurthi wrote at 11/17/2011 09:43 AM:
>> DSSSL (-:
>>
>> (Since I believe Bigloo and/or Gambit implemented DSSSL, lurking in
>> their implementations is code that does this...)
>
> Also, the Curl programming language had units of measurement built-in:
> http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.131.6818
>
>> 2.4.1.3 Quantities
>>
>> Presentation-oriented applications frequently deal with
>> measurements of space and time. Curl accordingly includes
>> "quantity types," which are numeric data types with units, such as
>> Distance and Time. These types are distinct from the
>> conventional dimensionless numeric types such as float and
>> double. There are also quantity literals, such as 2.54cm,
>> 72pt, 50ms, 1week, and even 800dpi and 32(ft/(s^2)).
>> By using quantities, programmers can let Curl handle conversions
>> between units and can write more descriptive (and checkable)
>> interfaces to graphical APIs. There is also a pixel-denominated
>> unit px, which can be converted to a Distance by dividing by
>> the spatial resolution of a display device. Quantity types are not
>> found in other languages for creating Web content, but they are
>> used pervasively in the Curl GUI APIs and are tremendously
>> useful. in application programs.
>
> It seems easy for someone to add to Racket as a library, so long as
> the library user doesn't mind having to explicitly ``cast'' these
> objects to normal Racket numbers when they want to interoperate with
> Racket libraries that only work with numbers. Maybe use Typed Racket
> or contracts info to add in the type coercions manually, or maybe
> having to do the explicit casts is actually good programming practice.
Typo. I meant not "manually", but "automatically across module boundaries".
>
> I am doing something like this with an (as yet unreleased) time
> library, and have thought of doing it for financial apps as well.
>
> One thing I haven't decided is whether and how to represent precision
> (or resolution) information, and what to do with that information. For
> a simple example, what is the answer to the difference "(2 days) - (3
> minutes)"? I'm wondering whether the unit of measure alone can
> indicate the precision for 99.9% of practical purposes, or we have to
> be able to support more flexible specification of precision (e.g., "(2
> days) - (3 minutes to a precision of 15 seconds)").
>
_________________________________________________
For list-related administrative tasks:
http://lists.racket-lang.org/listinfo/users