[Haskell-beginners] splitAt implementation (using foldr) and infinite lists
sgf.dma at gmail.com
Mon Apr 16 18:12:54 CEST 2012
On 04/16/12 18:21, Lorenzo Bolla wrote:
> 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...
Thanks, Lorenzo! It works now.
On 04/16/12 18:55, Ozgur Akgun wrote:
> You can also use lazy pattern matching.
> On 16 April 2012 15:21, Lorenzo Bolla <lbolla at gmail.com
> <mailto:lbolla at 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..]
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners