Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^10: Small Perl 6 discoveries II, Rats

by holli (Abbot)
on Oct 25, 2017 at 01:43 UTC ( [id://1201986]=note: print w/replies, xml ) Need Help??


in reply to Re^9: Small Perl 6 discoveries II, Rats
in thread [Perl6] Small discoveries I, __DATA__

Yeah, well. That is to be expected as it is akin to assigning an int64 to an int32. What surprises me is that
perl6 -e "my FatRat $r = 0.1"
throws the same error.


holli

You can lead your users to water, but alas, you cannot drown them.

Replies are listed 'Best First'.
Re^11: Small Perl 6 discoveries II, Rats
by raiph (Deacon) on Oct 27, 2017 at 18:38 UTC
    First, Rats aren't FatRats and vice-versa. (If we need to discuss why, we'll need to start with Larry's comment that "we've intentionally steered clear of any sort of numeric tower"; and then dig into what p6curious meant when they followed that up with "its one of the things that has impressed me the most about perl6"; and then consider Rats and FatRats in particular.)

    Second, P6 has a nice feature that directly addresses this. It has been implemented for routine parameters but not yet `my` declarations:

    sub fails-if-passed-Rat (FatRat $r) { say WHAT $r } ; sub works-if-passed-number (FatRat() $r) { say WHAT $r } ; fails-if-passed-Rat 1.0 ; # typecheck failure works-if-passed-number 1.0 ; # coerces 1.0 to a FatRat my FatRat $r = 1.0 ; # typecheck failure my FatRat() $r = 1.0 ; # should say "not yet implemented"

      First, Rats aren't FatRats and vice-versa.
      They're both Rational, but that's still not very useful.
      > my Rational $x = 1.111111111111111111111; 1.11111111111111111604544 > $x *= 0.1; Type check failed in assignment to $x; expected Rational but got Num ( +0.111111111111111e0)
      The argument type-coercion is cute, but there doesn't seem to be any way to set the precision.
      > sub foo(FatRat() $x) { return $x }; foo(pi).nude (355 113) > pi.FatRat(1e-8).nude (103993 33102)
      And I don't know how to interpret this message...
      > my FatRat() $x = 0.1; ===SORRY!=== Error while compiling: Coercion FatRat(Any) is insufficiently type-like to qualify a variable ------> my FatRat() $x⏏ = 0.1; expecting any of: constraint
        In your first block of code you do a calculation whose resulting denominator is more than 64 bits. So the result is a Num.

        Your second block shows BUG Num.FatRat coercion is inexact.

        Your third block is an LTA error message. It should say something to the effect of "coercion type constraint on variable declaration not yet implemented".

        Hth.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1201986]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (3)
As of 2024-04-24 01:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found