Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 400,000 packages pre-installed, including naif with all npm packages installed. Try it out:

var naif = require("naif")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

naif v0.0.7

A naive set library.


Naive sets.

The sets are limited in what they can store b/c are based on aspic. Anything that is not serializable by JSON.stringify cannot be stored.

example usage

var naif = require('naif');

// call the naif function with zero or more array arguments:

var e = naif();

e.empty(); //true

var s1 = naif(['hello','there', 'this'],['is', 'is', 'is', 'a', 'set']);

s1.size();  //6

var s2 = naif(['hello','again'],['one',2, 3.1415, {'six' : 7}]);

s2.size(); //6

// we can do set operations using logical language:

var s1_intersect_s2 = s1.and(s2);

s1_intersect_s2.size();   //1


// hello

// we can chain several operators.
// the following prints out each string that is in the union of s1 and s2

s1.or(s2).suchthat(function(e) {return e.constructor === String}).each(console.log);

// hello
// there
// this
// is
// a
// set
// again
// one



The naif(array*) function takes zero or more arrays and returns a set object;

set objects

Given a set called s, the following functions are supported:

  • s.size() : returns the number of elements in the set

  • s.each(fn) : the basic set iterator, where fn is a function of a single argument.

  • s.or(s2) : returns the union of s and s2, where both are sets returned by naif

  • s.and(s2) : returns the intersection of s and s2

  • s.not(s2) : returns the set difference, s less s2

  • s.xor(s2) : returns those elements in s or s2 but not in both

  • s.empty() : returns true if s is the empty set

  • s.all(p) : returns true if p(e) is true for each e in s

  • s.exists(p) : returns true if p(e) is true for at least one e in s

  • s.subset(s2) : returns true if s is a subset of s2

  • s.superset(s2) : returns true if s is a superset of s2

  • s.equal(s2) : returns true if s and s2 contain the same elements, up to the equality of their serialized contents (see aspic for details about serialization)

  • s.toArray() : returns an array of the set's contents.

  • s.mutable() : this extends s with new methods for mutability, returning a new mutable set that shares memory with s.

mutable set objects

Mutable sets have all of the functions above, plus two more:

  • ms.insert(x) : inserts x into the the set
  • ms.remove(x) : removes x from the set

oh goodie.


RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free