From be9919478aafcfa21957256d4f549059bc5ebc25 Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Fri, 28 Jan 2022 18:59:37 +0000 Subject: =?UTF-8?q?Implement=20where=20(=E2=8D=B8),=20unique=20mask=20(?= =?UTF-8?q?=E2=89=A0)=20and=20unique=20(=E2=88=AA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apl9.h | 3 +++ functions.c | 24 +++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/apl9.h b/apl9.h index 2846861..2a7565f 100644 --- a/apl9.h +++ b/apl9.h @@ -294,6 +294,7 @@ Array *fnMagnitude(Array *); Array *fnCeiling(Array *); Array *fnFloor(Array *); Array *fnSame(Array *); +Array *fnUniqueMask(Array *); Array *fnDepth(Array *); Array *fnTally(Array *); Array *fnMix(Array *); @@ -304,7 +305,9 @@ Array *fnNest(Array *); Array *fnGradeUp(Array *); Array *fnGradeDown(Array *); Array *fnIndexGenerator(Array *); +Array *fnWhere(Array *); Array *fnEnlist(Array *); +Array *fnUnique(Array *); Array *fnNot(Array *); Array *fnRavel(Array *); Array *fnTable(Array *); diff --git a/functions.c b/functions.c index ad87c11..3b32cca 100644 --- a/functions.c +++ b/functions.c @@ -25,7 +25,7 @@ fnmonad monadfunctiondefs[] = { fnSame, /* ⊣ */ fnSame, /* ⊢ */ 0, /* = */ - 0, /* ≠ */ + fnUniqueMask, /* ≠ */ 0, /* ≤ */ 0, /* < */ 0, /* > */ @@ -45,10 +45,10 @@ fnmonad monadfunctiondefs[] = { fnGradeUp, /* ⍋ */ fnGradeDown, /* ⍒ */ fnIndexGenerator, /* ⍳ */ - 0, /* ⍸ */ + fnWhere, /* ⍸ */ fnEnlist, /* ∊ */ 0, /* ⍷ */ - 0, /* ∪ */ + fnUnique, /* ∪ */ 0, /* ∩ */ fnNot, /* ~ */ fnRavel, /* , */ @@ -366,6 +366,12 @@ fnSame(Array *right) return right; } +Array * +fnUniqueMask(Array *right) +{ + return rundfn(L"(⍳≢⍵)≤⊃∘⍸¨↓≡⌾⍨⌷∘⍵¨⍳≢⍵", nil, nil, nil, right); +} + Array * fnDepth(Array *right) { @@ -575,6 +581,12 @@ fnIndexGenerator(Array *right) return res; } +Array * +fnWhere(Array *right) +{ + return rundfn(L"(,⍵)⌿,⍳⍴⍵", nil, nil, nil, right); +} + Array * fnEnlist(Array *right) { @@ -595,6 +607,12 @@ fnEnlist(Array *right) } } +Array * +fnUnique(Array *right) +{ + return rundfn(L"(≠⍵)⌿⍵", nil, nil, nil, right); +} + Array * fnNot(Array *right) { -- cgit v1.2.3