
Henning Thielemann wrote:
On Wed, 11 Aug 2004, Lyle Kopnicky wrote:
Here's my version:
combs [] = [] combs [n] = [[i] | i <- [0..n]] combs (n:r) = let combsr = combs r in [i:cr | i <- [0..n], cr <- combsr]
Since there is one zero combination, it should be
combs [] = [[]]
Ah, yes. I knew I must be missing something. That would be a lock which has no numbers on it, but can be opened at any time.
Then you can also remove the definition of combs [n] .
What is the advantage of introducing 'combsr' instead of using 'combs r' immediately?
I initially did that to save recalculation, but later shifted things around, and now I see there is no need for it. Thanks. Here is the improved version: combs [] = [[]] combs (n:r) = [i:cr | i <- [0..n], cr <- combs r] - Lyle