Skip to content
/ pbsl Public

Functional library for manipulation of pairs-based data structures with Sass-like API

License

Notifications You must be signed in to change notification settings

mr150/pbsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

12c0dff · Jul 26, 2022

History

27 Commits
Jul 12, 2022
Jul 12, 2022
Jun 24, 2022
Jun 24, 2022
Jul 26, 2022
Jul 10, 2022
Jul 6, 2022
Jul 26, 2022
Jun 24, 2022
Jul 26, 2022
Jul 26, 2022
Jul 26, 2022

Repository files navigation

Pairs based structures library

Functional library for manipulation of pairs-based data structures with Sass-like API. Original ideas from SICP.

Library for study. Not for production projects.

About

The library contains 3 data structures and functions for working with them. Key features:

  • creation and manipulation occur using functions
  • objects are not used
  • structures are immutable

Functions for creating are called constructors. Functions for getting data are called selectors.

The library consists of the following structures:

  • pair
  • list
  • map

All structures based on pairs.

Pair

Pair is simple structure that consist of 2 any type elements. Pair may contain other pairs.

import { pair, fir, sec, toString } from 'pbsl/pair';

const myPair = pair(1, 2);
const nestedPair = pair('testou', myPair);

fir(myPair) // 1
sec(myPair) // 2

toString(myPair) // (1, 2)
toString(nestedPair) // (testou, (1, 2))

List

The list is an orderly sequence of any elements. By default, the list are typed by first item. Also you can specify the type manually.

import { pair } from 'pbsl/pair';
import { l, top, tail, toString, prepand } from 'pbsl/list';

const myList = l(2, 5, 6);
const pairInList = l<unknown>(pair(1, 0), 'item', 'end');

top(myList) // 2
tail(myList) // l(5, 6)
prepand(myList, 0) // (0, 2, 5, 6)
toString(myList) // (2, 5, 6)
toString(pairInList) // ((1, 0), item, end)

Under the hood, list is a nested pairs where second element of last pair is a null. Empty list also is null.

l(2, 5, 6) // pair(2, pair(5, pair(6, null)))

Manipulation

For working with the lists are available some functions with Sass-like API:

  • append
  • index
  • join
  • length
  • nth
  • setNth

And main functions for working with sequences with js Array-like API:

  • map
  • filter
  • reduce
  • find
  • findIndex

Map

Map is a list of pairs in the 'key-value' format. The map is created based on array with a tuples with 2 elements: key and value. Typed like a list with ability to specify a types.

import { mkMap, get, set } from 'pbsl/map';
import { toString } from 'pbsl/list';

const myMap = mkMap([['name', 'mister'], ['age', '54']]);
const codes = mkMap([[200, 'ok'], [403, 'forbidden'], [404, 'not found']]);

toString(myMap) // ((name, mister), (age, 54))
get(myMap, 'name') // 'mister'
toString(set(myMap, 'race', 'human')) // ((race, human), (name, mister), (age, 54))

For working with maps also used Sass-like API. The following functions are available:

  • get
  • set
  • has
  • remove
  • merge
  • keys
  • values

Installation

npm i -D pbsl

License

MIT

About

Functional library for manipulation of pairs-based data structures with Sass-like API

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published