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