Dave Whipp wrote:
> The definition of the Complex type seems a little weak. A few things:
>
> To get the Cartesian components of the value there are two methods ("re"
> and "im"). In contrast there is just one method "polar" to return the
> polar components of the value
Not quite, .abs returns one of the polar coordinates (the magnitude), so
only a method is missing that returns the angle.
Any ideas for a good name?
> I'm not sure that this asymmetry is a good
> thing. Contrast with Rat which has both separate accessors and the
> "nude" method (a name that could possibly be improved to avoid
> adult-content filters)
suggestions welcome.
> The next thing I notice is that the return value of "polar" is defined
> as a "Seq" (as is the return value of "nude"), with an English-language
> definition of that the (exactly) two members of the sequence are. Surely
> it is possible in a perl6 signature to define the return value more
> formally, something like:
>
> our multi method polar (Complex $nim: --> [ Real $mag where 0..Inf,
> Real $angle where -π ..^ π ]) is export { ... }
If you put this into a signature, it is checked on every call to that
method and thus slows down execution. If you want a formalization that's
not part of the signature, you find that in the test suite.
> Finally, anyone using complex numbers probably wants a "conjugate"
> method and/or operator postfix:<*> almost as much as they want unary-minus:
>
> $mag = sqrt( $z * $z* );
$max = abs $z;
I agree that conjugate is a good idea, but please don't use postfix:<*>
for that. It's defined as a term and as an infix already, and in
signatures also as a prefix. There's also the infix:<**> and the term
**, and I won't even start to talk about regexes and other DSLs or twigils.
I'm really opposed to giving the asterisk yet another meaning.
Cheers,
Moritz