
haonan21 wrote:
I'm very new to haskell hugs and would appreciate it if someone could help me out here. I've been giving 2 questions.
1.) A and B are two sets of integers. Implement a function to obtain the integers that belong to both sets. Test your function fully.
2.) Define and test a function f, which, if A is a set of {x, y, z} then f(A) = {{},{x}, {y}, {z}, {x, y}, {x,z}, {y,z}, {x, y, z}}
Manage to get the first one. interset::[Int]->[Int]->[Int]
interset x [] = []
interset [] y = []
interset x@(xs:xt) y@(ys:yt) = if xs == ys then as:(interset at yt) else interset at y
Totally have no clue for the 2nd question. could someone help me out ?
Many thanks!
Haonan, This looks like homework, but I can offer a few suggestions. Your "interset" function uses "as" and "at" where I think you mean "xs" and "xt" and the else case is wrong (you need to test the code!). Anyway, it looks like you're assuming that the lists are in ascending order, and I don't see that in the problem specification -- it won't work if that isn't the case. More interestingly, you should look at the List (or Data.List) library; it contains a library function which can solve your problem in one line. As for the second function, that's a classic problem used for teaching recursion: find all subsets of a given list. The way to solve it is to first ask what the solution is for the empty set (which should be obvious). Then assume that you have the solution for the tail of the list ({y, z}). How would you use this and the head of the list (x) to generate the full solution? HTH, Mike