
Le 23 juil. 2013 10:54, "Costello, Roger L."
Hi Folks,
I have a list of singletons:
xs = [("a")]
f is a function that, given an argument x, it returns the argument:
f x = x
g is a function that, given an argument x, it returns the empty list:
g x = []
I have a list comprehension that extracts the singletons from xs using f
and g, and creates a pair from their output:
[(a,b) | a <- f xs, b <- g xs]
I executed this and the result is the empty list:
[]
That is odd. Why is the empty list the result?
This is pretty normal since there are no elements in "g xs" so b can takes no values. You have got some excellent answers on that but I think your problem is more fundamental :
f x = x
This function does nothing or more precisely it is the identity, you can replace "f anything" by "anything" and have exactly the same result.
g x = []
This function just takes anything and returns an empty list. So
[(a,b) | a <- f xs, b <- g xs]
Is exactly the same as :
[(a,b) | a <- xs, b <- [] ]
If xs is ["a"] that becomes
[(a,b) | a <- ["a"], b <- [] ]
I think those f and g didn't work like that in your mind so could you explain what you thought they should do (with some examples maybe). -- Jedaï