[Haskell-cafe] What is this function?
Luke Palmer
lrpalmer at gmail.com
Thu Oct 16 05:39:55 EDT 2008
2008/10/16 John Ky <newhoggy at gmail.com>:
> Hi,
>
> I've written this function here:
>
> scramble [] = []
> scramble [x] = [[z] | z <- scramble x]
> scramble (x:xs) =
> [(y:z)|y <- scramble x, z <- scramble xs]
>
> and (I think) it roughly does what I want it to:
>
> *Main> scramble ([]::[Int])
> []
> *Main> scramble ([1]::[Int])
> [[1],[2]]
So, um, this is nonsense. You've given it only 1, and yet it outputs
a 2, yet there is no mention of addition or the literal 2 anywhere in
your function.
This function looks a lot like the more sensible:
scramble' n xs = sequence (replicate n xs)
>>> scramble' 0 [1,2,3]
[[]]
>>> scramble' 1 [1,2,3]
[[1],[2],[3]]
>>> scramble' 2 [1,2,3]
[[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
Where your examples all had [1,2] as the argument.
Luke
More information about the Haskell-Cafe
mailing list