我正在尝试在 Haskell 中实现一个函数,该函数将采用任意整数列表xs
和一个整数k
,并返回一组列表k
在所有可能的位置。
例如,对于一个xs = [0, 1]
and k = 2
,我们会有
myFunction [0, 1] 2 = [ [2, 0, 1], [0, 2, 1], [0, 1, 2] ]
我已经将其实现为
putOn xs x i = (take i xs) ++ (x:(drop i xs))
putOnAll xs x = map (putOn xs x) [0..(length xs)]
然而,我觉得必须有其他更聪明的方法来实现同样的目标。我的代码看起来就像有人试图用导弹杀死一个错误。有人能建议如何做一些比这段代码更聪明的事情吗?
Thanks
取自这个问题 https://stackoverflow.com/questions/3884121/haskell-i-am-too-old-for-this/3884182#3884182:
ins x [] = [[x]]
ins x (y:ys) = (x:y:ys):[ y:res | res <- ins x ys]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)