Back
Close

Getting started with BrainFuck

DPAmar
45.5K views

Evaluate Not() function

If we say that 0 is false, and any other value is true, here is a way to evaluate not(A) from a value A.

Detailled specification is : if A == 0, then A := 1 else A := 0

This allows us to define this operation using the previous if/then/else snippet

Let's start

  • Memory: A, 0
  • Cursor: on A
  • Input: any

Process

  • set else flag to 1
  • while A is not null
    • while A is not null decrease A (aka. reset A)
    • reset else flag
  • loop (on an empty cell)
  • while else flag is not null
    • increase A
    • reset else flag
  • loop (on an empty cell)
  • go back to cell A

Code

>+<    set _else_ flag to 1
[      while A is not null
  [-]  while A is not null decrease A (aka reset A)
  >-<  reset _else_ flag
]      loop (on an empty cell)
>[     while _else_ flag is not null
  <+>  increase A
  -    reset _else_ flag
]      loop (on an empty cell)
<      go back to cell A

Minified version

>+<[[-]>-<]>[<+>-]<

Final state

  • Memory: not(A)
  • Cursor: on first cell
  • Input: unchanged
  • Output: unchanged

Test program

This program does nothing if input is provided, or display 0 if input stream is empty, using not(input)

,                     read char C
>+<[[-]>-<]>[<+>-]<   get not(C); true if and only if C was empty
[                     while not(C)
  >++++++++           (6)
  [->++++++<]         (x8 = 48)
  >.                  print (48 = '0' ASCII code)
  [-]<<               cleansing
  -                   reset not(C)
]                     loop (on an empty cell)
Create your playground on Tech.io
This playground was created on Tech.io, our hands-on, knowledge-sharing platform for developers.
Go to tech.io