That's a good idea, and it's quite easy to implement using contracts! Would something like this suit you? (this is currently working as is) https://gist.github.com/Metaxal/7212740
Laurent On Tue, Oct 29, 2013 at 11:40 AM, Konrad Hinsen <konrad.hin...@fastmail.net>wrote: > Laurent writes: > > > So I've redesigned it somewhat, and now there are 2 calculation "modes": > > - The normal mode is pretty much like Frink (probably the one you > want), which converts > > everything to base SI units. Conversion back to non base units can be > done afterwards. > > Well, what I really want is something else, but this is a useful > feature nevertheless for a unit calculator. It would be nice though if > the default units to which everything is converted were modifiable. SI > units are fine for engineering and daily life, but neither for > astrophysics nor for atomic-scale measurements. > > What I personally care about most is dimensional analysis as a means > of ensuring program correctness. I want to be able to write > > (define: (kinetic-energy (m : Mass) (v : Velocity) : Energy > (m* 1/2 m v v)) > > and then compute the kinetic energy of a car as > > (kinetic-energy (m 1000 kg) (m 90 km (h -1))) > > whereas a typical mistake such as > > (kinetic-energy (m 1000 kg) (m 90 km h)) > > would get caught by the type checker (ideally) or at run time. With a > unit-converter approach such as the one you implemented, the erroneous > call would be accepted and an error would be detected only if the > result is later converted to an explicitly named energy unit. > > Konrad. > ____________________ > Racket Users list: > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users