```phinary←{⎕IO ⎕ML←0 1                ⍝ Phinary representation of numbers ⍵.
⍺←1                             ⍝ result formatted by default.
Ø←(1+5*÷2)÷2                    ⍝ Phi.
''≡0/∊⍵:{                       ⍝ char array: inverse: phinary → decimal.
1<|≡⍵:∇¨⍵                   ⍝ nested: decode each.
'¯'=⊃⍵:-∇ 1↓⍵               ⍝ -ive: negation of inverse of +ive.
a←Ø⊥⎕D⍳⍵~'.'                ⍝ phi decode of ⍵.
a÷Ø*(≢⍵∪'.')-1+(,⍵)⍳'.'     ⍝ adjusted by posn of phinary point.
}⍵                              ⍝ ⍵ is char vect phinary number.
0≠≡⍵:⍺ ∇¨⍵                      ⍝ higher rank, depth: encode each.
⍵<0:'¯',⍺ ∇-⍵                   ⍝ negative.
num←⍵                           ⍝ target number.
⍺{                              ⍝ format of powers of phi.
⍺=0:⍵                       ⍝ no formatting: raw powers.
⍵≡⍬:,'0'                    ⍝ '0' better than '.'.
fmt←⌷∘'01'∘⊂                ⍝ format '1010...'
lft←(⌽⍳0⌈1+⌈/⍵)∊⍵           ⍝ digits to the left of '.'
rgt←(¯1-⍳0⌈|⌊/⍵)∊⍵          ⍝   ..      ..  right   ..
rgt∧.=0:fmt lft             ⍝ all +ive: no phinary point.
lft∧.=0:'0.',fmt rgt        ⍝ all -ive: leading '0.'
(fmt lft),'.',fmt rgt       ⍝ both: point-separated digits.
}⍬{                             ⍝ accumulated powers of phi.
num=Ø+.*⍺:⍺                 ⍝ convergence: done.
∆←(-⍴⍺)↑1                   ⍝ delta (1 in least sig place)
num=Ø+.*⍺+∆:⍺+∆             ⍝ (⍺+∆) convergence: done.
k←⌊Ø⍟⍵                      ⍝ next power of phi.
(⍺,k)∇ ⍵-Ø*k                ⍝ accumlated powers of phi.
}⍵
}

code_colours

test script

Back to: notes

Back to: Workspaces
```