|
@@ -6043,23 +6043,37 @@ value_t *_adverb_amend_dyad(interpreter_t *state, verb_t *self, value_t *x,
|
|
|
x = verb_enlist(state, NULL, x);
|
|
|
|
|
|
value_t *v = self->bonds->data[0];
|
|
|
- if (v->tag != ARRAY)
|
|
|
+ if (v->tag != ARRAY && v->tag != VERB)
|
|
|
v = verb_enlist(state, NULL, v);
|
|
|
|
|
|
if (y->tag != ARRAY)
|
|
|
y = verb_enlist(state, NULL, y);
|
|
|
|
|
|
list_t *r = list_copy(y->val.array);
|
|
|
-
|
|
|
size_t l = x->val.array->length;
|
|
|
|
|
|
- list_t *t = v->val.array;
|
|
|
- for (size_t i = 0; i < t->length; i++) {
|
|
|
- value_t *n = t->data[i];
|
|
|
- if (n->tag != NUMBER)
|
|
|
- break;
|
|
|
+ if (v->tag == VERB) {
|
|
|
+ list_t *t = x->val.array;
|
|
|
+ for (size_t i = 0; i < t->length; i++) {
|
|
|
+ value_t *n = t->data[i];
|
|
|
+ if (n->tag != NUMBER)
|
|
|
+ break;
|
|
|
|
|
|
- list_set(r, n->val.number, list_index(x->val.array, i < l ? i : l - 1));
|
|
|
+ value_t *e = list_index(r, n->val.number);
|
|
|
+ if (!e)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ list_set(r, n->val.number, apply_monad(state, v, e));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ list_t *t = v->val.array;
|
|
|
+ for (size_t i = 0; i < t->length; i++) {
|
|
|
+ value_t *n = t->data[i];
|
|
|
+ if (n->tag != NUMBER)
|
|
|
+ break;
|
|
|
+
|
|
|
+ list_set(r, n->val.number, list_index(x->val.array, i < l ? i : l - 1));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return value_new_array(r);
|