4 ms·
Can someone give a little more background why a unit conversion library needs a parser? Like an ELI5 for someone not into neither Perl or Raku and haven’t met
by wodenokoto 7y ago
Can someone give a little more background why a unit conversion library needs a parser?
Like an ELI5 for someone not into neither Perl or Raku and haven’t met the units library before.
- b2gills 7y agoYou really wouldn't really need to in Raku. Mainly because you can add things to the existing parser instead. (See postfix and infix below.) role Physics::Datum { has Real $.value is required; } role Physics::Distance { also does Physics::Datum; } role Physics::Volume { also does Physics::Datum; } class Physics::Volume::Gallon { also does Physics::Volume; } class Physics::Distance::Mile { also does Physics::Distance; } role Physics::Per[ ::N-Type, ::D-Type ] { has N-Type $.nu is required; has D-Type $.de is required; # could have a submethod TWEAK to reduce the fraction } constant gallon = Physics::Volume::Gallon.new( value => 1 ); sub postfix:<miles> ( Real $value ){ Physics::Distance::Meter.new( :$value ) } sub infix:<per> ( ::NT Physics::Datum $nu, ::DT Physics::Datum $de ){ Physics::Per[NT,DT].new( :$nu, :$de ) } my $mpg = 5miles per gallon; Which would result in the following data structure. Physics::Per[ Physics::Distance::Mile, Physics::Volume::Gallon ].new( nu => Physics::Distance::Mile.new( value => 5 ), de => Physics::Volume::Gallon.new( value => 1 ), ) I think the main reason it was written that way was it was copied from Perl. A lot of the above would be more difficult or slower in Perl. (This was mostly a quick throwaway example of how it could be done.)
- riffraff 7y agoyou would define values like weight = unit("10 kg") speed = unit("2.5 furlong per week")
- wodenokoto 7y agoMy imaginary units library would have been like Unit(float, unit_as_string) The free text version is pretty cool though
- choward 7y agoI would parse the free text version into something like your version. It could be used for user input from a text input field or the command line.
- Symbiote 7y agoEven further, presumably things like kg·m·s⁻², which (perhaps) this library can equate to Newtons.
- p6steve 7y agothis works now x for input and output ... the challenge for this kind of thing in bare code is that you need a LOT of namespace ... .oO maybe override the dot?
- iso-8859-1 7y agoBut what does strings have to do with it? Why can't those expressions be plain Perl, maybe with some overloaded operators? For example, import week, custom, si, type from stdlib.units weight = 10 * si.kg speed = 2.5 * (custom("furlong", type.LENGTH) / week)
- p6steve 7y agothis is also important - but imo, and in practice from perl5, the Units library experience is a lot richer if you can do both - especially for entry level programmers such as high school students - more on this to come in v2