Original version | (1) tokens(S, Seps) -> | (2) tokens1(S, Seps, []). | (3) tokens1([C∣S], Seps, Toks) -> | (4) case member(C, Seps) of | (5) true -> | (6) tokens1(S, Seps, Toks); | (7) false -> | (8) tokens2(S, Seps, Toks, [C]) | (9) end; | (10) tokens1([], _Seps, Toks) -> | (11) reverse(Toks). | (12) tokens2([C∣S], Seps, Toks, Cs) -> | (13) case member(C, Seps) of | (14) true -> | (15) tokens1(S, Seps, [reverse(Cs)∣Toks]); | (16) false -> | (17) tokens2(S, Seps, Toks, [C∣Cs]) | (18) end; | (19) tokens2([], _Seps, Toks, Cs) -> | (20) reverse([reverse(Cs)∣Toks]). | Optimized version | (1) tokens(S, Seps) -> | (2) case Seps of | (3) [] -> | (4) case S of | (5) [] -> []; | (6) [_∣_] -> [S] | (7) end; | (8) [C] -> | (9) tokens_single_1(reverse(S), C, []); | (10) [_∣_] -> | (11) tokens_multiple_1(reverse(S), Seps, []) | (12) end. | (13) tokens_single_1([Sep∣S], Sep, Toks) -> | (14) tokens_single_1(S, Sep, Toks); | (15) tokens_single_1([C∣S], Sep, Toks) -> | (16) tokens_single_2(S, Sep, Toks, [C]); | (17) tokens_single_1([], _, Toks) -> | (18) Toks. | (19) tokens_single_2([Sep∣S], Sep, Toks, Tok) -> | (20) tokens_single_1(S, Sep, [Tok∣Toks]); | (21) tokens_single_2([C∣S], Sep, Toks, Tok) -> | (22) tokens_single_2(S, Sep, Toks, [C∣Tok]); | (23) tokens_single_2([], _Sep, Toks, Tok) -> | (24) [Tok∣Toks]. | (25) tokens_multiple_1([C∣S], Seps, Toks) -> | (26) case member(C, Seps) of | (27) true -> | (28) tokens_multiple_1(S, Seps, Toks); | (29) false -> | (30) tokens_multiple_2(S, Seps, Toks, [C]) | (31) end; | (32) tokens_multiple_1([], _Seps, Toks) -> | (33) Toks. | (34) tokens_multiple_2([C∣S], Seps, Toks, Tok) -> | (35) case member(C, Seps) of | (36) true -> | (37) tokens_multiple_1(S, Seps, [Tok∣Toks]); | (38) false -> | (39) tokens_multiple_2(S, Seps, Toks, [C∣Tok]) | (40) end; | (41) tokens_multiple_2([], _Seps, Toks, Tok) -> | (42) [Tok∣Toks]. |
|