在列表中散布分隔符有两种可能性:
[x1, sep, x2, sep, .. xn]
[sep, x1, sep, x2, .. sep, xn]
在Data.List中使用"intersperse"函数:
?> intersperse 0 [1..5]
[1,0,2,0,3,0,4,0,5]
?> 0 : intersperse 0 [1..5]
[0,1,0,2,0,3,0,4,0,5]
Run Code Online (Sandbox Code Playgroud)
但是,使用隐藏(未导出)函数"prependToAll"可以简化第二种情况:
?> prependToAll 0 [1..5]
[0,1,0,2,0,3,0,4,0,5]
Run Code Online (Sandbox Code Playgroud)
为什么在Data.List库中导出了散布而而对于prepreToAll却没有?
从在注释prependToAll中的Data.List源代码:
...
-- Not exported:
-- We want to make every element in the 'intersperse'd list available
-- as soon as possible to avoid space leaks. Experiments suggested that
-- a separate top-level helper is more efficient than a local worker.
...
Run Code Online (Sandbox Code Playgroud)