http://swannodette.github.io/mori/
var emptyVec = mori.vector();
var nonEmpty = mori.conj(emptyVec, 1, 2, 3, 4);
var nonEmpty_ = mori.subvec(nonEmpty, 1, 3);
mori.reduce(mori.sum, 0, nonEmpty_); // 5
- list
- vector
- array_map
- hash_map
- range
- set
- sorted_map
- sorted_map_by
- sorted_set
- sorted_set_by
var numbers = mori.range();
var nats = mori.drop(1, numbers);
mori.take(10, nats); // (1 2 3 4 5 6 7 8 9)
mori.into_array(mori.take(10, nats)); // [1 2 3 4 5 6 7 8 9]
var s = mori.set([1, 2, 3, 4]);
mori.has_key(s, 3); // true
var empty = mori.sorted_set_by(function(a, b) {
return a.foo - b.foo;
});
var s = mori.conj(empty, {foo: 2, msg: 'second'}, {foo: 1, msg: 'first'});
mori.first(s).msg; // 'first'
http://clojuredocs.org/clojure_core/clojure.core/sorted-set-by
$ npm install mori
require(['mori'], function(mori) {
// ...
});
var mori = require('mori');
function findNode(idSelf, routeTable, concurrencyLvl, runQuery, target) {
var startPeers = routeTable.closest(target).slice(0, concurrencyLvl);
var complete = false;
var state = mori.into(mori.sorted_set_by(function(a, b) {
return Id.compare(Id.dist(target, a.id), Id.dist(target, b.id));
}), startPeers);
var threads = startPeers.map(thread);
function thread() {
var closest = mori.first(state);
state = mori.drop(1, state);
if (!closest || complete) {
return Bacon.never();
}
if (Id.compare(closest.id, target) === 0) {
complete = true;
return Bacon.once(closest);
}
return Bacon.merge(
Bacon.once(closest),
Bacon.fromPromise(
runQuery(closest, messages.find_node(idSelf, target))
)
.flatMap(function(resp) {
state = mori.into(resp.results);
return thread();
})
);
}
return Bacon.mergeAll(threads);
}