]> gitweb.factorcode.org Git - factor.git/commitdiff
fjsc: add some sequences words
authorchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 03:20:27 +0000 (03:20 +0000)
committerchris.double <chris.double@double.co.nz>
Sun, 17 Dec 2006 03:20:27 +0000 (03:20 +0000)
apps/furnace-fjsc/resources/bootstrap.js
libs/fjsc/fjsc.factor

index 6c493b4eb33de6809a9b226cf4059bb2c82d60f1..562f197d5ce461f0dcba6af315a023daef149aa8 100644 (file)
@@ -335,34 +335,6 @@ factor.add_word("alien", "alien-invoke", "primitive", function(next) {
   factor.call_next(next);
 });
 
-factor.add_word("sequences", "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.add_word("sequences", "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);
-});
 
 factor.add_word("words", "vocabs", "primitive", function(next) {   
   var stack = factor.cont.data_stack;
@@ -447,3 +419,101 @@ factor.add_word("kernel", "current-using", "primitive", function(next) {
   stack.push(factor.using_vocabs);
   factor.call_next(next);  
 });
+
+/* Sequences vocabulary */
+factor.add_word("sequences", "nth", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  var index = stack.pop();
+  stack.push(seq[index]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "second", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[1]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "third", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[2]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "fourth", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first2", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first3", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1],seq[2]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "first4", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var seq = stack.pop();
+  stack.push(seq[0],seq[1],seq[2],seq[3]);
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "each", "primitive", function(next) {   
+  var stack = factor.cont.data_stack;
+  var quot = stack.pop();
+  var seq = stack.pop();
+  for(var i=0;i<seq.length;++i) {  
+    stack.push(seq[i]);
+    quot.execute();
+  }
+  factor.call_next(next);
+});
+
+factor.add_word("sequences", "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.add_word("sequences", "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);
+});
index dd306d80776b50066c359185e23d43ded7425827..061aa88196bb1564ff71c10c663e450194df179b 100644 (file)
@@ -169,7 +169,7 @@ M: ast-define (compile)
       drop do-expressions
     ] if
   ] [
-    drop "factor.next" ,
+    drop "factor.cont.next" ,
   ] if  ;
 
 M: ast-quotation (literal)