aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/reference.bqn22
1 files changed, 16 insertions, 6 deletions
diff --git a/spec/reference.bqn b/spec/reference.bqn
index 57245ac6..08ead65a 100644
--- a/spec/reference.bqn
+++ b/spec/reference.bqn
@@ -130,12 +130,22 @@ Nat←IsArray◶⟨0⊸≤∧⌊⊸=,0⟩
Deshape←IsArray◶{⟨𝕩⟩}‿⥊
Reshape←{
! 1≥=𝕨
- 𝕨↩⥊𝕨
- ! ∧´Nat¨𝕨
- n←≠𝕩 ⋄ l←×´𝕨
- ! n≤○(0⊸=)l
- 𝕨⥊⊑⟜𝕩¨n|↕l
-}⟜Deshape
+ s←Deshape 𝕨
+ sp←+´p←¬Nat⌜s
+ ! 1≥sp
+ n←≠d←Deshape 𝕩
+ l←sp◶(×´)‿{
+ lp←×´p⊣◶⊢‿1¨𝕩
+ ! 0<lp
+ I←+´↕∘≠⊸×
+ t←I e←⟨∘,⌊,⌽,↑⟩=(I p)⊑s
+ ! +´e
+ a←(2⌊t)◶⟨{!Nat𝕩⋄𝕩},⌊,⌈⟩n÷lp
+ s↩p⊣◶⊢‿a¨s
+ {d∾↩(Type d)⌜↕𝕩-n⋄n↩𝕩}⍟(n⊸<)⍟(3=t)lp×a
+ } s
+ s⥊d(n<○(0⊸<)l)◶⟨Type⊸(⊣¨)⋄{⊑⟜𝕨¨n|𝕩}⟩↕l
+}
Range←{
I←{!Nat𝕩⋄↕𝕩}