Add average
function and ensure that delay
does not propagate the default value.
This commit is contained in:
parent
b16714eb6b
commit
8d7df3d08d
1 changed files with 54 additions and 9 deletions
|
@ -132,11 +132,15 @@ Elm.Signal = function() {
|
|||
|
||||
function delay(t) { return function(s) {
|
||||
var delayed = new input(s.value);
|
||||
var firstEvent = true;
|
||||
function update(v) {
|
||||
setTimeout(function() { Dispatcher.notify(delayed.id,v); },t*1000);
|
||||
if (firstEvent) return;
|
||||
setTimeout(function() { Dispatcher.notify(delayed.id,v); },t);
|
||||
}
|
||||
function first(a) { return function(b) { return a; }; }
|
||||
return new lift(first, [delayed, new lift(update,[s])]);
|
||||
var out = new sampleOn(delayed,new lift(first, [delayed, new lift(update,[s])]));
|
||||
firstEvent = false;
|
||||
return out;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -173,16 +177,56 @@ Elm.Signal = function() {
|
|||
s2.kids.push(this);
|
||||
};
|
||||
|
||||
function average(sampleSize) { return function(s) {
|
||||
var sample = new Array(sampleSize);
|
||||
var i = sampleSize;
|
||||
while (i--) sample[i] = 0;
|
||||
i = 0;
|
||||
var full = false;
|
||||
var total = 0;
|
||||
function f(n) {
|
||||
total += n - sample[i];
|
||||
sample[i] = n;
|
||||
var avg = total / Math.max(1, full ? sampleSize : i);
|
||||
if (++i == sampleSize) { full = true; i = 0; }
|
||||
return avg;
|
||||
}
|
||||
return new lift(f, [s]);
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
constant : function(v) { return new input(v); },
|
||||
lift : function(f){return function(e){return new lift(f,[e]);};},
|
||||
lift2 : function(f) { return function(e1) { return function(e2) {
|
||||
return new lift(f, [e1,e2]); }; }; },
|
||||
lift3 : function(f) { return function(e1) { return function(e2) {
|
||||
return function(e3){return new lift(f,[e1,e2,e3]);};};};},
|
||||
lift4 : function(f) { return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return new lift(f, [e1,e2,e3,e4]); }; }; }; }; },
|
||||
lift2 : function(f) {
|
||||
return function(e1) { return function(e2) {
|
||||
return new lift(f, [e1,e2]); };};},
|
||||
lift3 : function(f) {
|
||||
return function(e1) { return function(e2) {
|
||||
return function(e3){return new lift(f,[e1,e2,e3]);};};};},
|
||||
lift4 : function(f) {
|
||||
return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return new lift(f, [e1,e2,e3,e4]);};};};};},
|
||||
lift5 : function(f) {
|
||||
return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return function(e5) {
|
||||
return new lift(f, [e1,e2,e3,e4,e5]);};};};};};},
|
||||
lift6 : function(f) { return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return function(e5) { return function(e6) {
|
||||
return new lift(f, [e1,e2,e3,e4,e5,e6]); };};};};};};},
|
||||
lift7 : function(f) { return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return function(e5) { return function(e6) {
|
||||
return function(e7) {
|
||||
return new lift(f, [e1,e2,e3,e4,e5,e6,e7]);};};};};};};};},
|
||||
lift8 : function(f) { return function(e1) { return function(e2) {
|
||||
return function(e3) { return function(e4) {
|
||||
return function(e5) { return function(e6) {
|
||||
return function(e7) { return function(e8) {
|
||||
return new lift(f, [e1,e2,e3,e4,e5,e6,e7,e8]);};};};};};};};};},
|
||||
foldp : function(f) { return function(b) { return function(e) {
|
||||
return new fold(f,b,false,e); }; }; },
|
||||
foldp_ : function(f) { return function(b) { return function(e) {
|
||||
|
@ -191,6 +235,7 @@ Elm.Signal = function() {
|
|||
return new fold(f,function(x){return x;},true,e); }; },
|
||||
delay : delay,
|
||||
merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
|
||||
average : average,
|
||||
count : function(sig) {
|
||||
var incr = function(_){return function(c){return c+1;};};
|
||||
return new fold(incr,0,false,sig) },
|
||||
|
|
Loading…
Reference in a new issue