FAQ
# New Ticket Created by Ira Byerly
# Please include the string: [perl #74334]
# in the subject line of all future correspondence about this issue.
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=74334 >


Hello,

I noticed that certain uses of sort no longer work in Rakudo after the ng
merge in February 2010. For example, this line in the table tennis example
in the Perl 6 book...

my @sorted = @names.sort({ %sets{$_} }).sort({ %games{$_} }).reverse

fails, as does this trivial example,

$ rakudo -e '<1 3 4 2>.sort({-$^a}).say'
Too many positional parameters passed; got 2 but expected 1...

The attached patch fixes the problem as follows:

1. In Seq.pm, the sort method is modified to make a ResizablePMCArray to
use with Parrot's sort method. The original code said that it did so in the
comments, but it actually made a Parcel instead. This first patch doesn't
fix anything by itself, but without it, the change to Parcel.pm would cause
an infinite loop.
2. In Parcel.pm, a sort method is added, which uses the sort in Seq.pm.
This fixes both of the examples above.
3. Hash.pm is also modified to use the sort in Seq.pm. This allows the
"%hash.sort returns a List of Pairs" test in t/spec/S32-list/sort.t to work.
4. Subroutine versions of sort are provided in Seq.pm and Hash.pm. (But
not in Parcel.pm.... the distinction between Parcel and Seq is lost in
subroutine calls. The subroutines in Seq.pm work for both parcel and array
parameters.)

Note that one test in t/spec/S32-list/sort.t fails...

not ok 4 - array of mixed numbers including Inf/NaN
# got: [-Inf, -61/20, -1e-07, 1/10, 11/10, 2, 42, Inf, NaN]
# expected: [NaN, -Inf, -61/20, -1e-07, 1/10, 11/10, 2, 42, Inf]

This is due to NaN sorting greater than Inf, rather than less than -Inf.
Since this is consistent with the Rakudo spaceship operator...

$ perl6 -e 'say NaN <=> Inf'
1

... I'm not sure that is appropriate to "fix" it in the code; it might be
better to change the test to match Rakudo's behavoir, or perhaps the test
should accept either >+Inf or <-Inf. The IEEE 754 standard just specifies
that than NaN should be "unordered".

Please let me know if you have any comments or concerns or would rather see
a different approach.

Best regards,
Ira Kevin Byerly
quester (on #perl6 and perlmonks)
quester.pm@gmail.com

Search Discussions

Discussion Posts

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 1 of 4 | next ›
Discussion Overview
groupperl6-compiler @
categoriesperl
postedApr 13, '10 at 12:43p
activeApr 13, '10 at 9:56p
posts4
users4
websiteperl6.org

People

Translate

site design / logo © 2021 Grokbase