Dear friends: I am an ULTRA-ULTRA Haskell beginner, just started literally yesterday. I am just toying around with Cordelia Hall and John O'Donnell excellent book on dicrete mathematics with Haskell. Well, they have a program, stdm, to accompany the book. It happens that it is in literate style. In theory, this should be very easy to work with, but after saving it with lhs extension, I try to load it, without success. Could somebody out there help me with this? Best regards, Francisco Gutiérrez From: "beginners-request@haskell.org" <beginners-request@haskell.org> To: beginners@haskell.org Sent: Monday, April 16, 2012 2:45 PM Subject: Beginners Digest, Vol 46, Issue 23 Send Beginners mailing list submissions to beginners@haskell.org 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 beginners-request@haskell.org You can reach the person managing the list at beginners-owner@haskell.org When replying, please edit your Subject line so it is more specific than "Re: Contents of Beginners digest..." Today's Topics: 1. Re: splitAt implementation (using foldr) and infinite lists (Lorenzo Bolla) 2. Re: splitAt implementation (using foldr) and infinite lists (Ozgur Akgun) 3. Re: Design of Webmachine in Haskell (Petar Radosevic) 4. Re: Design of Webmachine in Haskell (Michael Snoyman) 5. Re: splitAt implementation (using foldr) and infinite lists (Dmitriy Matrosov) 6. Training tasks (Nikita Beloglazov) 7. Cross-platform .hs files on Linux and Windows (Vinay Sajip) 8. Re: Cross-platform .hs files on Linux and Windows (Lorenzo Bolla) ---------------------------------------------------------------------- Message: 1 Date: Mon, 16 Apr 2012 15:21:55 +0100 From: Lorenzo Bolla <lbolla@gmail.com> Subject: Re: [Haskell-beginners] splitAt implementation (using foldr) and infinite lists Cc: beginners@haskell.org Message-ID: <20120416142155.GC30186@dell> Content-Type: text/plain; charset=us-ascii On Mon, Apr 16, 2012 at 12:52:02PM +0400, Dmitriy Matrosov wrote:
Hi all.
If i implement take using foldr
take' :: Int -> [a] -> [a] take' n = foldr (\x z -> if fst x <= n then snd x : z else []) [] . zip [1..]
it'll work fine with infinite lists. But if i implement splitAt similarly
splitAt' :: Int -> [a] -> ([a], [a]) splitAt' n = foldr (\x (z1, z2) -> if fst x <= n then (snd x : z1, z2) else ([], snd x : z2)) ([], []) . zip [1..]
and call it like this
*Main> fst $ splitAt' 4 [1..] ^CInterrupted.
Try something like this: splitAt' n = foldr (\x zs -> if fst x <= n then (snd x : fst zs, snd zs) else ([], snd x : snd zs)) ([], []) . zip [1..] I'm no Haskell expert, but I suspect that when pattern-matching z2, it tries to evaluate it and it hangs... My version does not hang... hth, L. -- Lorenzo Bolla http://lbolla.info ------------------------------ Message: 2 Date: Mon, 16 Apr 2012 15:55:20 +0100 From: Ozgur Akgun <ozgurakgun@gmail.com> Subject: Re: [Haskell-beginners] splitAt implementation (using foldr) and infinite lists To: Lorenzo Bolla <lbolla@gmail.com> Cc: beginners@haskell.org Message-ID: <CALzazPAs7X+JXD5nu4+E+HiyCeQhbMwJ7qJ+beC0uCzips6gFA@mail.gmail.com> Content-Type: text/plain; charset="utf-8" You can also use lazy pattern matching. http://en.wikibooks.org/wiki/Haskell/Laziness#Lazy_pattern_matching On 16 April 2012 15:21, Lorenzo Bolla <lbolla@gmail.com> wrote:
splitAt' :: Int -> [a] -> ([a], [a]) splitAt' n = foldr (\x ~(z1, z2) -> if fst x <= n then (snd x : z1, z2) else ([], snd x : z2)) ([], []) . zip [1..]
Ozgur
Hi.
I am just toying around with Cordelia Hall and John O'Donnell excellent book on dicrete mathematics with Haskell. Well, they have a program, stdm, to accompany the book. It happens that it is in literate style. In theory, this should be very easy to work with, but after saving it with lhs extension, I try to load it, without success. Could somebody out there help me with this?
You should say where you got the file, and explain what "without success" means. Also, it's relevant which version of GHC you're using (assuming you're using GHC). I googled and downloaded this file http://www.dcs.gla.ac.uk/~jtod/discrete-mathematics/Stdm.lhs I can successfully load it in both ghc-7.0.4 and ghc-7.4.1 by saying ghci -XHaskell98 Stdm.lhs The -XHaskell98 specifies that the file is written in Haskell98 rather than the more recent Haskell2010 standard. If you're using an older ghc version (ghc-6.12.3, for example), this flag isn't required. HTH, Andres
participants (2)
-
Andres Löh -
Francisco Gutierrez