From 17e97bbed7abc59fb754cf463e825e890b16815d Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Wed, 26 Jan 2022 15:09:20 +0000 Subject: =?UTF-8?q?Implement=20replicate=20first=20and=20last=20=E2=8C=BF?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hybrids.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'hybrids.c') diff --git a/hybrids.c b/hybrids.c index 2ac2a91..da42e62 100644 --- a/hybrids.c +++ b/hybrids.c @@ -7,9 +7,9 @@ Rune primhybridnames[] = L"/\\⌿⍀"; fndyad hybridfunctiondefs[] = { - 0, /* / */ + fnReplicateLast, /* / */ 0, /* \ */ - 0, /* ⌿ */ + fnReplicateFirst, /* ⌿ */ 0, /* ⍀ */ }; @@ -21,6 +21,22 @@ opmonad hybridoperatordefs[] = { }; /* function definitions */ +Array * +fnReplicateLast(Array *left, Array *right) +{ + return rundfn(L"⍉⍺⌿⍉⍵", nil, nil, left, right); +} + +Array * +fnReplicateFirst(Array *left, Array *right) +{ + Rune *code = + L"(0=≢⍴⍵)∧⍺∧.=0: 0⍴⍵ ⋄" + L"⍺∧.=0: (((1,¯1+≢⍴⍵)⌿¯1 1)⌿⍴⍵)⍴⍵ ⋄" + L"1=×⌿⍴,⍵: ↑⍪⌿(+⌿⍺)⍴⊂⍵ ⋄" + L"↑↑⍪⌿⍺ (⍵{e←⊂⍵⌷⍶ ⋄ ⍺>0: ⍺⍴e ⋄ (|⍺)⍴⎕PROTO e})¨⍳≢⍵"; + return rundfn(code, nil, nil, left, right); +} /* operator definitions */ Array * -- cgit v1.2.3