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 --- functions.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'functions.c') 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