Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re^6: 99 Problems in Perl6

by gaal (Parson)
on Dec 15, 2006 at 22:54 UTC ( #590145=note: print w/ replies, xml ) Need Help??

in reply to Re^5: 99 Problems in Perl6
in thread 99 Problems in Perl6

The "alternative solution" posted there doesn't suffer from the monomorphism restriction*, and thus does less to propagate the myth that one has to be a genius to write code in Haskell. It also works correctly with empty input :-)

compress [] = [] compress [a] = [a] -- singleton list compress (x:y:xs) = (if x == y then [] else [x]) ++ compress (y:xs)
*Something that, for the casual programmer, is quite technical but uninteresting, has a scary name, and a not-that-friendly error message.

Comment on Re^6: 99 Problems in Perl6
Download Code
Re^7: 99 Problems in Perl6
by TimToady (Parson) on Dec 15, 2006 at 23:31 UTC
    And indeed, you can do that in Perl too:
    multi compress () { () } multi compress ($a) { item $a } multi compress ($x, $y, *@xs) { $x xx ($x !=== $y), compress($y, |@xs) + } my @x = <a a a a b c c a a d e e e e>; say perl compress |@x;
      Didn't we end up using when for guards? The problem with multis for this I seem to remember was that it was hard to spec their order if they're defined in separate compilation units.
        We'll support matching against sigs using when if you really want ordered guards, but multis are defined to ignore ordering, so it doesn't matter where they're defined, in this file or in any other file. Only the type semantics of the signature matter. Overuse of ordered guards is actually kind of a semantic flaw in Haskell, I think. It's a way of sneaking in sequential dependencies without a monad.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (12)
As of 2014-07-10 15:03 GMT
Find Nodes?
    Voting Booth?

    When choosing user names for websites, I prefer to use:

    Results (212 votes), past polls