on master help sign in
Add split to List module and rename intercalate to join.
6bcf63aevancz
libraries/List.elm+4−5
@@ -50,14 +50,13 @@ unzip pairs =
50 [] -> ([],[])
50 [] -> ([],[])
51 (x,y)::ps -> let (xs,ys) = (unzip ps) in (x::xs,y::ys)
51 (x,y)::ps -> let (xs,ys) = (unzip ps) in (x::xs,y::ys)
52
52
53+split : [a] -> [a] -> [[a]]
54+join : [a] -> [[a]] -> [a]
55+
56+intersperse : a -> [a] -> [a]
53intersperse sep xs =
57intersperse sep xs =
54 case xs of
58 case xs of
55 a::b::cs -> a :: sep :: intersperse sep (b::cs)
59 a::b::cs -> a :: sep :: intersperse sep (b::cs)
56 [a] -> [a]
60 [a] -> [a]
57 [] -> []
61 [] -> []
58
62
59−intercalate sep xs =
60− case xs of
61− a::b::cs -> a ++ sep ++ intercalate sep (b::cs)
62− [a] -> a
63− [] -> []
libraries/Native/List.js+47−1
@@ -223,6 +223,49 @@ Elm.Native.List = function(elm) {
223 return xs;
223 return xs;
224 }
224 }
225
225
226+ function join(sep, xss) {
227+ if (xss.ctor === 'Nil') return {ctor:'Nil'}
228+ var s = toArray(sep);
229+ var out = toArray(xss._0);
230+ xss = xss._1;
231+ while (xss.ctor === "Cons") {
232+ out += s + toArray(xss._0);
233+ }
234+ return fromArray(out);
235+ }
236+
237+ function split(sep, xs) {
238+ var out = {ctor:'Nil'};
239+ var array = toArray(xs);
240+ var s = toArray(sep);
241+ var slen = s.length;
242+ if (slen === 0) {
243+ for (var i = array.length; i--; ) {
244+ out = Cons(Cons(array[i],Nil), out);
245+ }
246+ return out;
247+ }
248+ var temp = {ctor:'Nil'};
249+ for (var i = array.length - slen; i >= 0; --i) {
250+ var match = true;
251+ for (var j = slen; j--; ) {
252+ if (!Utils.eq(array[i+j], s[j])) { match = false; break; }
253+ }
254+ if (match) {
255+ out = {ctor:'Cons', _0:temp, _1:out};
256+ temp = {ctor:'Nil'};
257+ i -= slen - 1;
258+ } else {
259+ temp = {ctor:'Cons', _0:array[i+j], _1:temp};
260+ }
261+ }
262+ for (var j = slen-1; j--; ) {
263+ temp = {ctor:'Cons', _0:array[j], _1:temp};
264+ }
265+ out = {ctor:'Cons', _0:temp, _1:out};
266+ return out;
267+ }
268+
226 return elm.Native.List = {
269 return elm.Native.List = {
227 Nil:Nil,
270 Nil:Nil,
228 Cons:Cons,
271 Cons:Cons,
@@ -255,7 +298,10 @@ Elm.Native.List = function(elm) {
255 zip:F2(zip),
298 zip:F2(zip),
256 sort:sort,
299 sort:sort,
257 take:F2(take),
300 take:F2(take),
258− drop:F2(drop)
301+ drop:F2(drop),
302+
303+ join:F2(join),
304+ split:F2(split)
259 };
305 };
260
306
261};
307};