Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^5: Pearls (not really) of Perl programming

by htoug (Deacon)
on Dec 01, 2004 at 18:49 UTC ( #411533=note: print w/ replies, xml ) Need Help??


in reply to Re^4: Pearls (not really) of Perl programming
in thread Pearls (not really) of Perl programming

The comparison function for sort must not just return 'true' and 'false'.
It must return '-1', '0' and '+1' for comparing 'Less Than', 'Equal To' and 'Greater Than', just like the two standard comparison operators 'cmp' and '<=>' (for stringwise and numeric comparison respectively).

Just using 'true' (ie non-zero, probably 1) and false (ie 0 or '') will lead to confusion.

If f(a, b) is 'false' then f(b, a) must also be false because a 'Equals' b - for whatever value of 'Equals' this sorting choses to use.
If f(a, b) is 'true' then f(b, a) must return '-1' (ie a true value, but *not* just true) because a is 'Greater Than' b in this case, and therefore b must be 'Less Than' a - not 'Equal To', or something is decidedly wierd.

You have to be consistent however you chose to do it.


Comment on Re^5: Pearls (not really) of Perl programming
Replies are listed 'Best First'.
Re^6: Pearls (not really) of Perl programming
by Courage (Parson) on Dec 01, 2004 at 23:35 UTC
    You're right, thanks for correction.

    I just could not resist to point out for general idea (I saw that in p5p list) but I forgot to recheck all details

    But once we decided to be precise, let me make additional correction.
    Requirement to return '-1', '0' and '+1' is too restrictive. According to perldoc -f sort:

    parison order. If SUBNAME is specified, it gives the name of a subroutine that returns an integer less than, equal to, or greater than 0, depending on how the elements of the list are to be ordered. (The "<=>" and "cmp" operators are extremely useful in such routines.) SUBNAME may be a scalar variable
    So any negative and positive values are ok.

    Best regards,
    Courage, the Cowardly Dog

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2015-07-30 10:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (271 votes), past polls