diff options
author | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-26 15:09:20 +0000 |
---|---|---|
committer | Peter Mikkelsen <petermikkelsen10@gmail.com> | 2022-01-26 15:09:20 +0000 |
commit | 17e97bbed7abc59fb754cf463e825e890b16815d (patch) | |
tree | 3c3008e394311a05a221997c4b5575a3076d8f98 /hybrids.c | |
parent | 024867f3da16c7b51a768399401de1edcd417384 (diff) |
Implement replicate first and last ⌿ /
Diffstat (limited to 'hybrids.c')
-rw-r--r-- | hybrids.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -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 * |