Blues machine/Portable Minsky Machine Notation conversion
Jump to navigation
Jump to search
Overview:
- 0 will contain the constant 0.
- 1 will be a junk variable that absorbs any operations we don’t want.
- 2 will contain the constant 2.
- The Minsky machine must only use counter indices greater than or equal to 3. Equivalently, you can increase all counter indices by 3 before applying this conversion.
- A counter value of x is encoded as 2x.
Initialization
blues 2, 1, 1, 1, 1, 0, 1, 1 blues 2, 1, 1, 1, 1, 0, 1, 1 blues 3, 1, 1, 1, 1, 0, 1, 1 ⋮ blues N, 1, 1, 1, 1, 0, 1, 1
Incrementing
PMMN:
inc(n)
Pseudo-C:
*n *= 2;
Blues machine:
blues 1, n, 2, 1, 1, 0, 1, 1
Decrementing
PMMN:
dec(n)
Pseudo-C:
line m: *n /= 2; if(*n) goto m+2; line m+1: ++*n;
Blues machine:
line m: blues 1, 1, 1, n, 2, n, 1, m+2 line m+1: blues n, 1, 1, 1, 1, 0, 1, 1
If-Else
PMMN:
if(dec(n)) {...} else {...}
Pseudo-C:
line m: *n /= 2; if(*n) goto j; line m+1: ++*n; ⋮ else block line j-1: goto k; line j: ⋮ if block line k
Blues machine:
line m: blues 1, 1, 1, n, 2, n, 1, j line m+1: blues n, 1, 1, 1, 1, 0, 1, 1 ⋮ else block line j-1: blues 1, 1, 1, 1, 1, 2, 1, k ⋮ if block line k
While
PMMN:
while(dec(n)) {...}
Pseudo-C:
line m: *n /= 2; if(*n) goto m+3; line m+1: ++*n; line m+2: goto j; ⋮ while block line j-1: goto m;
Blues machine:
line m: blues 1, 1, 1, n, 2, n, 1, m+3 line m+1: blues n, 1, 1, 1, 1, 0, 1, 1 line m+2: blues 1, 1, 1, 1, 1, 2, 1, j ⋮ while block line j-1: blues 1, 1, 1, 1, 1, 2, 1, m