假设我有一个嵌套列表
[1,2,3]
当我使用数据时。List模块来排列此列表,结果如下:
> permutations [1,2,3]
=> [[1,2,3],[2,1,3],[3,2,1],[2,3,1],[3,1,2],[1,3,2]]
但我希望这样,我在每个尾部的末端连接一个0。示例:
=> [[1,2,3,0],[2,1,3,0],[3,2,1,0],[2,3,1,0],[3,1,2,0],[1,3,2,0]]
我认为唯一的方法是将置换的源代码修改为一个不同的函数,但我不确定如何将串联合并到其中。这将是来源:
import Data.List
permutations :: [a] -> [[a]]
permutations xs0 = xs0 : perms xs0 []
where
perms [] _ = []
perms (t:ts) is = foldr interleave (perms ts (t:is)) (permutations is)
where interleave xs r = let (_,zs) = interleave' id xs r in zs
interleave' _ [] r = (ts, r)
interleave' f (y:ys) r = let (us,zs) = interleave' (f . (y:)) ys r
in (y:us, f (t:y:us) : zs)
如果有更好的方法来实现这一点,使用置换函数而不置换零,那将非常感激。