OSDN Git Service

update.
authorvisor <visor@users.sourceforge.jp>
Tue, 5 Aug 2014 15:29:55 +0000 (00:29 +0900)
committervisor <visor@users.sourceforge.jp>
Tue, 5 Aug 2014 15:29:55 +0000 (00:29 +0900)
lib/expr.cc
modules/ml-variable.cc
modules/ml-variable.h

index 435cabe..a98a2d8 100644 (file)
@@ -90,9 +90,11 @@ MNode*  eval (MNode* cell, MlEnv* mlenv) {
     case MNode::MC_DOUBLE:
        return cell;
     case MNode::MC_VECTOR:
-       return vectorEval (cell, mlenv);
+//     return vectorEval (cell, mlenv);
+       return cell;
     case MNode::MC_TABLE:
-       return tableEval (cell, mlenv);
+//     return tableEval (cell, mlenv);
+       return cell;
     default:
        assert (0);
     }
index 967c9c6..3b546a8 100644 (file)
@@ -239,6 +239,26 @@ MNode*  ml_getvar (MNode* cell, MlEnv* mlenv) {
 }
 
 /*DOC:
+===vector===
+ (vector OBJ ...) -> VECTOR
+
+*/
+//#AFUNC       vector  ml_vector
+//#WIKIFUNC    vector
+MNode*  ml_vector (MNode* cell, MlEnv* mlenv) {
+    MNode*  arg = cell->cdr ();
+    int  n;
+    MNodePtr  ans;
+
+    ans = newMNode_vector ();
+    while (arg) {
+       ans ()->vectorPush (eval (arg->car (), mlenv));
+       nextNode (arg);
+    }
+    return ans.release ();
+}
+
+/*DOC:
 ===vector-get===
  (vector-get N VECTOR) -> VALUE
 
@@ -382,6 +402,32 @@ MNode*  ml_vector_resize (MNode* cell, MlEnv* mlenv) {
 }
 
 /*DOC:
+===table===
+ (table CONS ...) -> TABLE
+
+*/
+//#AFUNC       table   ml_table
+//#WIKIFUNC    table
+MNode*  ml_table (MNode* cell, MlEnv* mlenv) {
+    MNode*  arg = cell->cdr ();
+    int  n;
+    MNodePtr  ans;
+    MNodePtr  v;
+
+    ans = newMNode_table ();
+    while (arg) {
+       v = eval (arg->car (), mlenv);
+       nextNode (arg);
+       if (v () && v ()->isCons ()) {
+           ans ()->tablePut (to_string (v ()->car ()), v ()->cdr ());
+       } else {
+           throw (uErrorWrongType);
+       }
+    }
+    return ans.release ();
+}
+
+/*DOC:
 ===table-get===
  (table-get NAME TABLE) -> VALUE
 
index 375572d..a3fe462 100644 (file)
@@ -9,11 +9,13 @@ MNode*  ml_setarray (MNode* cell, MlEnv* mlenv);
 MNode*  ml_setevar (MNode* cell, MlEnv* mlenv);
 MNode*  ml_let (MNode* cell, MlEnv* mlenv);
 MNode*  ml_getvar (MNode* cell, MlEnv* mlenv);
+MNode*  ml_vector (MNode* cell, MlEnv* mlenv);
 MNode*  ml_vector_get (MNode* cell, MlEnv* mlenv);
 MNode*  ml_vector_put (MNode* cell, MlEnv* mlenv);
 MNode*  ml_vector_push (MNode* cell, MlEnv* mlenv);
 MNode*  ml_vector_pop (MNode* cell, MlEnv* mlenv);
 MNode*  ml_vector_resize (MNode* cell, MlEnv* mlenv);
+MNode*  ml_table (MNode* cell, MlEnv* mlenv);
 MNode*  ml_table_get (MNode* cell, MlEnv* mlenv);
 MNode*  ml_table_put (MNode* cell, MlEnv* mlenv);
 MNode*  ml_push (MNode* cell, MlEnv* mlenv);