Send Beginners mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://www.haskell.org/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."
Today's Topics:
1. Re: Learning about channels (Benjamin Edwards)
2. Re: Learning about channels (Daniel Fischer)
3. Re: Removing the biggest element from a list - maybe slow?
(Markus L?ll)
----------------------------------------------------------------------
Message: 1
Date: Tue, 25 May 2010 11:35:38 +0100
From: Benjamin Edwards <[email protected]>
Subject: Re: [Haskell-beginners] Learning about channels
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset="iso-8859-1"
Having read
this<http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Control-Concurrent.html>page
a bit more I think I understand why the prgram was blocking, but if I
compile with -threaded surely the readChan function shouldn't prevent the
producer from producing?
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
http://www.haskell.org/pipermail/beginners/attachments/20100525/686ca391/attachment-0001.html
------------------------------
Message: 2
Date: Tue, 25 May 2010 13:31:51 +0200
From: Daniel Fischer <[email protected]>
Subject: Re: [Haskell-beginners] Learning about channels
To: [email protected]
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"
On Tuesday 25 May 2010 12:35:38, Benjamin Edwards wrote:
> Having read
> this<http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Cont
>rol-Concurrent.html>page a bit more I think I understand why the prgram
> was blocking, but if I compile with -threaded surely the readChan
> function shouldn't prevent the producer from producing?
I'm afraid that is not so, "The downside of having lightweight threads is
that only one can run at a time" and I compiled the original with -threaded
and got:
$ ./chanTest +RTS -N2
chanTest: thread blocked indefinitely in an MVar operation
------------------------------
Message: 3
Date: Tue, 25 May 2010 18:30:25 +0300
From: Markus L?ll <[email protected]>
Subject: Re: [Haskell-beginners] Removing the biggest element from a
list - maybe slow?
To: [email protected]
Message-ID:
<[email protected]>
Content-Type: text/plain; charset=ISO-8859-1
Here is an ugly one:
remLargest2 [] = []
remLargest2 (li:st) = if something_bigger_in_tail then (li:result) else result
where ismax [] previous = ([], False)
ismax (current:rest) previous =
case (current_is_bigger_than_previous,
but_something_even_bigger_in_tail) of
(True, True) -> (current:newRest, True)
(False, True) -> (current:newRest, True)
(False, False) -> (current:newRest, False)
(True, False) -> ( newRest, True) -- current
is the biggest, lets leave it out
where f = ismax rest
current_is_bigger_than_previous = current > previous
(newRest, but_something_even_bigger_in_tail) =
if current_is_bigger_than_previous then f current
else f previous
(result, something_bigger_in_tail) = ismax st li
Besides the long names, could this be done somehow shorter?
The idea of it is to carry the maximum in 'previous' and compare it
with every element when recursing the list. When recursion reaches the
end, it starts to return, and on every step it tells the previous step
if there was something bigger down it's road of recursion or not. This
way every step knows if to drop its 'current' element -- this drop
happens only once.
So the steps it takes are defenitely 2n, because it rolls out, and
then has to return all the way -- even to get the first element
(because for it theres the question: "drop it or not?").
The order-not-retaining functions thus far are faster, taking only n steps.
The performance of Daniels remLargest depends on the order of elements
in the list: best case is if the list is grows like (=<), so there's
no use of an accumulator and concatenation: worst case is when the
list is composed of strictly descending lists -- then the time it
takes is 3n (n for traversing the list, n for reversing all sublists
and n for concatenating).
Cool problem ;-)
And we should do tests!
------------------------------
_______________________________________________
Beginners mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/beginners
End of Beginners Digest, Vol 23, Issue 39
*****************************************