aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-01 21:08:45 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2020-08-01 22:16:10 -0400
commit53671f739683445730cbd8bef8893ed31a685ac9 (patch)
tree85e68a23b3468f0ea5b80e94e48434b852fbf083
parentb972316dacfe6e138d8d81b579ab6f1097fa1fc8 (diff)
Explicit pervasion in impl.bqn
-rw-r--r--impl.bqn46
1 files changed, 26 insertions, 20 deletions
diff --git a/impl.bqn b/impl.bqn
index 2285f66e..a5889def 100644
--- a/impl.bqn
+++ b/impl.bqn
@@ -10,18 +10,10 @@
⍟ ← {𝕨((𝕨𝔾𝕩)βŠ‘βŠ’β€Ώπ•—){𝔽}𝕩} # LIMITED to boolean right operand result
# LIMITED to numeric arguments for scalar cases
-√ ← β‹†βŸœ(Γ·2) ⊘ (β‹†βŸœΓ·Λœ)
-∧ ← Γ—
-∨ ← (+-Γ—)
-Β¬ ← 1+-
-< ← {⟨⟩β₯ŠβŸ¨π•©βŸ©} ⊘ (Β¬β‰€Λœ)
-> ← (¬≀)
-β‰₯ ← !∘0 ⊘ (β‰€Λœ)
+< ← {⟨⟩β₯ŠβŸ¨π•©βŸ©} ⊘ (1-β‰€Λœ)
+> ← (1-≀)
β‰’ ↩ IsArrayβ—ΆβŸ¨βŸ©β€Ώβ‰’ # LIMITED to monadic case
-Length ← (0<0βŠ‘β‰’)β—ΆβŸ¨1β‹„0βŠ‘βŠ’βŸ©βˆ˜β‰’
-β‰  ← Length ⊘ (¬∘=)
-Γ— ↩ 0⊸(<->) ⊘ Γ—
-| ← Γ—βŸœΓ— ⊘ {𝕩-π•¨Γ—βŒŠπ•©Γ·π•¨}
+β‰  ← (0<=)β—ΆβŸ¨1β‹„0βŠ‘β‰’βŸ©
_fold←{
! 1==𝕩
@@ -35,18 +27,16 @@ _fold←{
#⌜
# LAYER 2: Pervasion
-# After defining _perv, we apply it to all scalar functions,
-# making them pervasive. I'm not going to write that out.
-ToArray ← <⍟(Β¬IsArray)
+ToArray ← <⍟(1-IsArray)
∾ ← {k←≠𝕨⋄kβŠΈβ‰€β—ΆβŸ¨βŠ‘βŸœπ•¨β‹„-⟜kβŠ‘π•©ΛœβŸ©βŒœβ†•k+≠𝕩} # LIMITED to two vector arguments
_eachd←{
_e←{ # 𝕨 has smaller or equal rank
k←≠p←≒𝕨 β‹„ q←≒𝕩
- ! ∧´(βŠ‘βŸœp=βŠ‘βŸœq)βŒœβ†•k
- l←×´(qβŠ‘Λœk⊸+)βŒœβ†•qβ‰ βŠΈ-k
+ ! 1Γ—Β΄(βŠ‘βŸœp=βŠ‘βŸœq)βŒœβ†•k
+ l←1Γ—Β΄(qβŠ‘Λœk⊸+)βŒœβ†•qβ‰ βŠΈ-k
a←β₯Šπ•¨ β‹„ b←β₯Šπ•©
qβ₯Šβ₯Š(β‰ a) (βŠ‘βŸœa𝔽lβŠΈΓ—βŠΈ+βŠ‘b˜)βŒœβ—‹β†• l
}
@@ -56,12 +46,28 @@ _eachd←{
Β¨ ↩ {(π”½βŒœ)⊘(𝔽_eachdβ—‹ToArray)}
_perv←{ # Pervasion
- (βŠ’βŠ˜βˆ¨β—‹IsArray)β—ΆβŸ¨π”½β‹„π”½{𝕨𝔽_perv𝕩}¨⟩
+ (⊒⊘(+-Γ—)β—‹IsArray)β—ΆβŸ¨π”½β‹„π”½{𝕨𝔽_perv𝕩}¨⟩
}
-⌊ ↩ ⌊ ⊘ ({(𝕨>𝕩)βŠ‘π•¨β€Ώπ•©} _perv)
-⌈ ← -∘⌊∘- ⊘ ({(𝕨<𝕩)βŠ‘π•¨β€Ώπ•©} _perv)
-identity ← {(0βŠ‘π•¨){𝕗=𝕩}◢𝕩‿(1βŠ‘π•¨)}Β΄ ⟨+β€Ώ0,-β€Ώ0,Γ—β€Ώ1,Γ·β€Ώ1,⋆‿1,βˆšβ€Ώ1,βˆ§β€Ώ1,βˆ¨β€Ώ0,|β€Ώ0,βŒŠβ€Ώβˆž,βŒˆβ€ΏΒ―βˆž,<β€Ώ0,≀‿1,=β€Ώ1,β‰₯β€Ώ1,>β€Ώ0,β‰ β€Ώ0,βŠ‘βŸ¨!∘0⟩⟩
++ ↩ + _perv
+- ↩ - _perv
+Γ— ↩ (0⊸(<->) ⊘ Γ—) _perv
+Γ· ↩ Γ· _perv
+⋆ ↩ ⋆ _perv
+√ ← β‹†βŸœ(Γ·2) ⊘ (β‹†βŸœΓ·Λœ)
+⌊ ↩ (⌊ ⊘ {(𝕨>𝕩)βŠ‘π•¨β€Ώπ•©}) _perv
+⌈ ← (-∘⌊∘- ⊘ {(𝕨<𝕩)βŠ‘π•¨β€Ώπ•©}) _perv
+| ← (Γ—βŸœΓ— ⊘ {𝕩-π•¨Γ—βŒŠπ•©Γ·π•¨}) _perv
+Β¬ ← 1+-
+∧ ← Γ—
+∨ ← (+-Γ—)
+< ↩ {⟨⟩β₯ŠβŸ¨π•©βŸ©} ⊘ ((Β¬β‰€Λœ) _perv)
+> ↩ > _perv
+β‰  ↩ β‰  ⊘ (¬∘= _perv)
+= ↩ = ⊘ (= _perv)
+≀ ↩ !∘0 ⊘ (≀ _perv)
+β‰₯ ← !∘0 ⊘ (β‰€Λœ_perv)
+identity ← {(0βŠ‘π•¨){𝕗=𝕩}◢𝕩‿(1βŠ‘π•¨)}Β΄ ⟨+β€Ώ0,-β€Ώ0,Γ—β€Ώ1,Γ·β€Ώ1,⋆‿1,βˆšβ€Ώ1,βˆ§β€Ώ1,βˆ¨β€Ώ0,|β€Ώ0,βŒŠβ€Ώβˆž,βŒˆβ€ΏΒ―βˆž,<β€Ώ0,≀‿1,=β€Ώ1,β‰₯β€Ώ1,>β€Ώ0,β‰ β€Ώ0,0βŠ‘βŸ¨!∘0⟩⟩
#⌜