]> gitweb.factorcode.org Git - factor.git/commitdiff
fjsc: add map and reduce back
authorchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 00:09:19 +0000 (00:09 +0000)
committerchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 00:09:19 +0000 (00:09 +0000)
apps/furnace-fjsc/resources/bootstrap.js

index 106064f1f4920efad16056c29ed475fe392f52bb..d3396e5d706e9f5e2274daa54482385a88eaca61 100644 (file)
@@ -31,12 +31,14 @@ function Factor() {
 var factor = new Factor();
 
 Factor.prototype.call_next = function(next) {
-  if(this.nesting++ > 150) {
-    this.nesting = 0;
-    setTimeout(next, 0);
-  }
-  else {
-    next();
+  if(next) {
+    if(this.nesting++ > 150) {
+      this.nesting = 0;
+      setTimeout(next, 0);
+   }
+    else {
+      next();
+    }
   }
 }
 
@@ -299,3 +301,32 @@ factor.words["alien-invoke"] = new Word("alien-invoke", "primitive", function(ne
     stack.push(v);
   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);
+});