From 9edf00b19d92e2c78e7fea7fd9bfc48234037adc Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sat, 22 Jan 2022 17:17:52 +0000 Subject: =?UTF-8?q?Implement=20enlist=20(monadic=20=E2=88=8A)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'functions.c') 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, /* ∩ */ @@ -432,6 +432,15 @@ fnEnclose(Array *right) } } +Array * +fnNest(Array *right) +{ + if(simplearray(right)) + return fnEnclose(right); + else + return fnSame(right); +} + Array * fnGradeUp(Array *right) { @@ -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 * -- cgit v1.2.3