I was trying to write a function to get all subsequences of a list that are of size n, but I’m not sure how to go about it.
I was thinking that I could probably use the built-in Data.List.subsequences and just filter out the lists that are not of size n, but it seems like a rather roundabout and inefficient way of doing it, and I’d rather not do that if I can avoid it, so I’m wondering if you have any ideas?
I want it to be something like this type
subseqofsize :: Int -> [a] -> [[a]]
For further clarification, here’s an example of what I’m looking for:
subseqofsize 2 [1,2,3,3]
[[1,2],[1,3],[2,3],[1,3],[2,3],[3,3]]
Also, I don’t care about the order of anything.
I’m assuming that this is homework, or that you are otherwise doing this as an exercise to learn, so I’ll give you an outline of what the solution looks like instead of spoon-feeding you the correct answer.
Anyway, this is a recursion question.
There are two base cases:
Then there are two recursive steps:
Remember that the definitions of the base cases need to work appropriately with the definitions in the recursive cases. Think carefully: don’t just assume that the base cases both result in an empty list.
Does this help?