0.0.2 • Published 8 years ago

list-pattern v0.0.2

Weekly downloads
2
License
MIT
Repository
github
Last release
8 years ago

list-pattern

A pattern to deconstruction list

Build Status Coverage Status

goal

Simplely write some grammer to divide a list. Get all possibilities about the dividing.

example

eg: 'a X b' as a pattern to divide 1, 2, 3, 4

All possibilities: [ [1, 2, 3, 4] ]. There only one possible [1, 2, 3, 4], a is 1, X is 2, 3 and b is 4.

  • rule: the word stands for element or sublist

the word start with capital letter stands for list

the word start with lower letter stands for element

In this example, a and b stands for one element of 1, 2, 3, 4, X stands for sublist of 1, 2, 3, 4.

  • rule: the expression stand for a way to divide list

a X b stands for a way to divide list, we can say 'one element (a) at first, then follow some elements (X), and end with one element.'

eg: 'head Mid Tail' as a pattern to divide 11, 32, 30

All possibilities:

[
    [11, [], [32, 30]],
    [11, [32], [30]],
    [11, [32, 30], []],
]

install

npm i list-pattern --save

code example

Api all can return all possibilities.

Api filter can return all possibilities of the items you cared about.

let pattern = require('list-pattern');
let all = pattern.all;

let m1 = all('Prev i Mid j Tail', [1, 2, 3, 4]);
let m2 = filter(['i', 'j'], 'Prev i Mid j Tail', [1, 2, 3, 4]);

console.log(m1);
/* result is:
[
    [
        [], 1, [], 2, [3, 4]
    ],
    [
        [], 1, [2], 3, [4]
    ],
    [
        [], 1, [2, 3], 4, []
    ],
    [
        [1], 2, [], 3, [4]
    ],
    [
        [1], 2, [3], 4, []
    ],
    [
        [1, 2], 3, [], 4, []
    ]
]
*/

console.log(m2);
/* result is:
[
    [1, 2],
    [1, 3],
    [1, 4],
    [2, 3],
    [2, 4],
    [3, 4]
]
*/

two special symbols

Words in pattern expresion like 'a X b' can not be repeated.

But ... and _ can be repeated.

... stands for sublist like word starts with capital letter.

_ stands for element like word starts with low case letter.

0.0.2

8 years ago

0.0.1

8 years ago