[Haskell-beginners] lists strange behaviour

Kim-Ee Yeoh ky3 at atamo.com
Wed Oct 28 11:01:18 UTC 2015


On Wed, Oct 28, 2015 at 5:52 PM, <galeonet at tiscali.it> wrote:

> but if I write: [(x,y)|x<-[1..5],y<-[1..5],x<-[1]]
> I obtain:
>
> [(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5),(1,1),(1,2),(1,3),(1,4),(1,5)]
>

Others will chime in with a full answer soon.

Meanwhile, consider that

[(x,y)|x<-[1..5],y<-[1..5],x<-[1]]

(which is quite weird as a set-theoretic expression)

is Haskell-equivalent to

[(x,y)|_<-[1..5],y<-[1..5],x<-[1]]

Now consider

[(x,y)|y<-[1..5],x<-[1]]

which is [(1,1),(1,2),(1,3),(1,4),(1,5)] as you expect.

Separately, consider

[ a | _ <- [1..5], f a ]

where you can experiment with different values of f and a.

Putting together the pieces will give you an answer to your query.


-- Kim-Ee
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151028/059f3c42/attachment.html>


More information about the Beginners mailing list