fjsc: add map and reduce back
parent
a1f1d42c2c
commit
40b9a43aef
|
@ -31,6 +31,7 @@ function Factor() {
|
||||||
var factor = new Factor();
|
var factor = new Factor();
|
||||||
|
|
||||||
Factor.prototype.call_next = function(next) {
|
Factor.prototype.call_next = function(next) {
|
||||||
|
if(next) {
|
||||||
if(this.nesting++ > 150) {
|
if(this.nesting++ > 150) {
|
||||||
this.nesting = 0;
|
this.nesting = 0;
|
||||||
setTimeout(next, 0);
|
setTimeout(next, 0);
|
||||||
|
@ -39,6 +40,7 @@ Factor.prototype.call_next = function(next) {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Factor.prototype.push_data = function(v, next) {
|
Factor.prototype.push_data = function(v, next) {
|
||||||
factor.cont.data_stack.push(v);
|
factor.cont.data_stack.push(v);
|
||||||
|
@ -299,3 +301,32 @@ factor.words["alien-invoke"] = new Word("alien-invoke", "primitive", function(ne
|
||||||
stack.push(v);
|
stack.push(v);
|
||||||
factor.call_next(next);
|
factor.call_next(next);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
factor.words["map"] = new Word("map", "primitive", function(next) {
|
||||||
|
var stack = factor.cont.data_stack;
|
||||||
|
var quot = stack.pop();
|
||||||
|
var seq = stack.pop();
|
||||||
|
var result = [ ];
|
||||||
|
for(var i=0;i<seq.length;++i) {
|
||||||
|
stack.push(seq[i]);
|
||||||
|
quot.execute();
|
||||||
|
result[i]=stack.pop();
|
||||||
|
}
|
||||||
|
stack.push(result);
|
||||||
|
factor.call_next(next);
|
||||||
|
});
|
||||||
|
|
||||||
|
factor.words["reduce"] = new Word("reduce", "primitive", function(next) {
|
||||||
|
var stack = factor.cont.data_stack;
|
||||||
|
var quot = stack.pop();
|
||||||
|
var prev = stack.pop();
|
||||||
|
var seq = stack.pop();
|
||||||
|
for(var i=0;i<seq.length;++i) {
|
||||||
|
stack.push(prev);
|
||||||
|
stack.push(seq[i]);
|
||||||
|
quot.execute();
|
||||||
|
prev=stack.pop();
|
||||||
|
}
|
||||||
|
stack.push(prev);
|
||||||
|
factor.call_next(next);
|
||||||
|
});
|
||||||
|
|
Loading…
Reference in New Issue