Debugging
---------
Reduction sequences may be traced by replacing the "=" equivalence with a "≡",
which displays reductions in the session as they occur. Infix function "≡" must
occur as a function ≡() in the source vector, in the usual fashion.
For example, taking signed binary arithmetic:
load sba
eval'1.0.1.0.0/1.1' ⍝ 20÷3 → 6
1.1.0
Replace each "=" in the "long division" stanza in sba with a "≡":
┌──────────────────────────────────────────────────────────────────────────────┐
│⍝ "long division" algorithm. See: notes.Long_division │
│ │
│ A1; p; q; r.i; s.j ≡ A1; p; q; r; s ⍝ A: left align divisor │
│ A1; p; q; r ; j ≡ A2; p; q; |; r ⍝ reset shift mechanism │
│ A1; p; q; i; s ≡ A2; p; q; |; i │
│ │
│ A2; p; q; s; r.i ≡ A2; p; q.0; s.<; r ⍝ shift divisor & count │
│ A2; p; q; s; i ≡ B1; p; q; s; 0 ⍝ s-shifted divisor q │
│ │
│ B1; p; q; s; r ≡ B2; p; q; s; r; p-q ⍝ subtract │
│ │
│ B2; p; q.j; s.<; r; -t ≡ B1; p; q; s; r.0 ⍝ shift right & repeat │
│ B2; p; q.j; s.<; r; t ≡ B1; t; q; s; r.1 │
│ B2; p; q; |; r; -t ≡ r.0; p ⍝ finished │
│ B2; p; q; |; r; t ≡ r.1; t │
└──────────────────────────────────────────────────────────────────────────────┘
load sba ⍝ reload revised sba
eval'1.0.1.0.0/1.1' ⍝ 20÷3 → 6
· · A1;1.0.1.0.0;1.1;1.0.1.0;1
· · A2;1.0.1.0.0;1.1;|;1.0.1.0
· · A2;1.0.1.0.0;1.1.0;|.<;1.0.1
· · A2;1.0.1.0.0;1.1.0.0;|.<.<;1.0
· · A2;1.0.1.0.0;1.1.0.0.0;|.<.<.<;1
· · B1;1.0.1.0.0;1.1.0.0.0;|.<.<.<;0
· · B2;1.0.1.0.0;1.1.0.0.0;|.<.<.<;0;1.0.1.0.0-1.1.0.0.0
· · B1;1.0.1.0.0;1.1.0.0;|.<.<;0.0
· · B2;1.0.1.0.0;1.1.0.0;|.<.<;0;1.0.1.0.0-1.1.0.0
· · B1;1.0.0.0;1.1.0;|.<;0.1
· · B2;1.0.0.0;1.1.0;|.<;1;1.0.0.0-1.1.0
· · B1;1.0;1.1;|;1.1
· · B2;1.0;1.1;|;1.1;1.0-1.1
· · 1.1.0;1.0
1.1.0
⍝ Operator [trace] temporarily replaces all occurrences of '=' with '≡'
⍝ throughout the whole of the script, thus providing a complete trace:
sba trace eval'1.0.1.0.0/1.1' ⍝ 20÷3 → 6
· div(A1;1.0.1.0.0;1.1;1.0.1.0.0;1.1)
· · A1;1.0.1.0.0;1.1;1.0.1.0;1
· · A2;1.0.1.0.0;1.1;|;1.0.1.0
· · A2;1.0.1.0.0;1.1.0;|.<;1.0.1
· · A2;1.0.1.0.0;1.1.0.0;|.<.<;1.0
· · A2;1.0.1.0.0;1.1.0.0.0;|.<.<.<;1
· · B1;1.0.1.0.0;1.1.0.0.0;|.<.<.<;0
· · B2;1.0.1.0.0;1.1.0.0.0;|.<.<.<;0;1.0.1.0.0-1.1.0.0.0
· · · (1.0.1.0-1.1.0.0).(0-0)
· · · · (1.0.1-1.1.0).(0-0)
· · · · · (1.0-1.1).(1-0)
· · · · · · (1-1).(0-1)
· · · · · · · 0
· · · · · · · -1
· · · · · · (0-1).1
· · · · · · · -1
· · · · · · -1.1
· · · · · · 1
· · · · · -1.1.1
· · · · · 0
· · · · -1.1.1.0
· · · · 0
· · · -1.1.1.0.0
· · B1;1.0.1.0.0;1.1.0.0;|.<.<;0.0
· · · 0
· · B2;1.0.1.0.0;1.1.0.0;|.<.<;0;1.0.1.0.0-1.1.0.0
· · · (1.0.1.0-1.1.0).(0-0)
· · · · (1.0.1-1.1).(0-0)
· · · · · (1.0-1).(1-1)
· · · · · · 1.(0-1)
· · · · · · · -1
· · · · · · (1-1).1
· · · · · · · 0
· · · · · · 1
· · · · · · 0
· · · · · 0
· · · · 0
· · B1;1.0.0.0;1.1.0;|.<;0.1
· · · 1
· · B2;1.0.0.0;1.1.0;|.<;1;1.0.0.0-1.1.0
· · · (1.0.0-1.1).(0-0)
· · · · (1.0-1).(0-1)
· · · · · 1.(0-1)
· · · · · · -1
· · · · · (1-1).1
· · · · · · 0
· · · · · 1
· · · · · -1
· · · · (1-1).1
· · · · · 0
· · · · 1
· · · · 0
· · B1;1.0;1.1;|;1.1
· · B2;1.0;1.1;|;1.1;1.0-1.1
· · · (1-1).(0-1)
· · · · 0
· · · · -1
· · · (0-1).1
· · · · -1
· · · -1.1
· · 1.1.0;1.0
· 1.1.0
1.1.0
Back to: →Contents←