[Haskell-beginners] take until duplicate

mike h mike_k_houghton at yahoo.co.uk
Sun Sep 24 19:31:46 UTC 2017


duh! I tried

scanr  (\x acc -> x : takeWhile (/= x) acc) [] [1,2,3,4,5,3] 

which gives 
[[1,2,3,4,5],[2,3,4,5],[3,4,5],[4,5,3],[5,3],[3],[]]

which kind of makes sense.

M



> On 24 Sep 2017, at 20:08, mike h <mike_k_houghton at yahoo.co.uk> wrote:
> 
> I’m looking at how to take from a list until a duplicate is found.
> e.g.
> 
> takeUntilDup [1,2,3,4,3] = [1,2,3,4]
> 
> I found this implementation 
> 
> takeUntilDup  = foldr (\x r -> x : takeWhile (/= x) r) []
> 
> It works but I can’t see how!!? 
> The accumulated result is built up in r so with input  [1,2,3,4,3] then,  at the point when r = [1, 2, 3, 4],  the fold is about to use the number 3. i.e. it does takeWhile (/=3) [1,2,3,4]  which gives [1,2] 
> 
> Please, how does this work?
> 
> Thanks
> Mike


.


More information about the Beginners mailing list