txlyre hace 1 día
padre
commit
1c4f02a2cb
Se han modificado 1 ficheros con 20 adiciones y 37 borrados
  1. 20 37
      jk.c

+ 20 - 37
jk.c

@@ -5513,25 +5513,14 @@ value_t *verb_lines(interpreter_t *state, verb_t *self, value_t *x) {
   return value_new_array(r);
 }
 
-value_t *verb_delete(interpreter_t *state, verb_t *self, value_t *x,
-                     value_t *y) {
-  if (x->tag != NUMBER)
-    return state->udf;
-
-  if (y->tag != ARRAY)
-    y = verb_enlist(state, NULL, y);
-  else if (!y->val.array->data)
-    return y;
-
-  size_t z = y->val.array->length;
-
-  ssize_t index = trunc(x->val.number);
-
+list_t *list_delete(list_t *l, ssize_t index) {
+  size_t z = l->length;
+  
   if (index < 0)
     index += ((ssize_t)z);
 
   if (index < 0 || index >= z)
-    return y;
+    return l;
 
   list_t *r = list_newk(z - 1);
   size_t ri = 0;
@@ -5540,41 +5529,35 @@ value_t *verb_delete(interpreter_t *state, verb_t *self, value_t *x,
     if (i == index)
       continue;
     else
-      r->data[ri++] = y->val.array->data[i];
-
-  return value_new_array(r);
+      r->data[ri++] = l->data[i];
+      
+  return r;
 }
 
-value_t *verb_deleteInplace(interpreter_t *state, verb_t *self, value_t *x,
-                            value_t *y) {
+value_t *verb_delete(interpreter_t *state, verb_t *self, value_t *x,
+                     value_t *y) {
   if (x->tag != NUMBER)
     return state->udf;
 
   if (y->tag != ARRAY)
-    return state->udf;
+    y = verb_enlist(state, NULL, y);
   else if (!y->val.array->data)
     return y;
 
-  size_t z = y->val.array->length;
-
-  ssize_t index = trunc(x->val.number);
+  return value_new_array(list_delete(y->val.array, trunc(x->val.number)));
+}
 
-  if (index < 0)
-    index += ((ssize_t)z);
+value_t *verb_deleteInplace(interpreter_t *state, verb_t *self, value_t *x,
+                            value_t *y) {
+  if (x->tag != NUMBER)
+    return state->udf;
 
-  if (index < 0 || index >= z)
+  if (y->tag != ARRAY)
+    return state->udf;
+  else if (!y->val.array->data)
     return y;
 
-  list_t *r = list_newk(z - 1);
-  size_t ri = 0;
-
-  for (size_t i = 0; i < z; i++)
-    if (i == index)
-      continue;
-    else
-      r->data[ri++] = y->val.array->data[i];
-
-  y->val.array = r;
+  y->val.array = list_delete(y->val.array, trunc(x->val.number));
   
   return y;
 }