diff options
-rw-r--r-- | apl9.h | 1 | ||||
-rw-r--r-- | functions.c | 30 |
2 files changed, 26 insertions, 5 deletions
@@ -252,6 +252,7 @@ Array *fnNest(Array *); Array *fnGradeUp(Array *); Array *fnGradeDown(Array *); Array *fnIndexGenerator(Array *); +Array *fnEnlist(Array *); Array *fnNot(Array *); Array *fnRavel(Array *); Array *fnTable(Array *); diff --git a/functions.c b/functions.c index 2e0bfa2..f2b0d83 100644 --- a/functions.c +++ b/functions.c @@ -46,7 +46,7 @@ fnmonad monadfunctiondefs[] = { fnGradeDown, /* ⍒ */ fnIndexGenerator, /* ⍳ */ 0, /* ⍸ */ - 0, /* ∊ */ + fnEnlist, /* ∊ */ 0, /* ⍷ */ 0, /* ∪ */ 0, /* ∩ */ @@ -433,6 +433,15 @@ fnEnclose(Array *right) } Array * +fnNest(Array *right) +{ + if(simplearray(right)) + return fnEnclose(right); + else + return fnSame(right); +} + +Array * fnGradeUp(Array *right) { if(right->rank == 0) @@ -493,12 +502,23 @@ fnIndexGenerator(Array *right) } Array * -fnNest(Array *right) +fnEnlist(Array *right) { - if(simplearray(right)) - return fnEnclose(right); - else + if(right->size == 0) return fnSame(right); + if(right->type != AtypeArray) + return fnRavel(right); + else{ + Array *res = fnEnlist(right->arraydata[0]); + for(int i = 1; i < right->size; i++){ + Array *old = res; + Array *tmp = fnEnlist(right->arraydata[i]); + res = fnCatenateFirst(res, tmp); + freearray(old); + freearray(tmp); + } + return res; + } } Array * |