Я не понимаю эффект квадратных скобок

Я только начал изучать brainfuck, и я только на примере hello world. У меня вопрос, для чего используются квадратные скобки?

Пример:

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

Это программа "привет мир". Я не понимаю, почему [ ] я понимаю - и +, но я где-то читал, что фигурная скобка:

[ (opening square bracket)
while(mem[ptr]) {
] (closing square bracket)
}

но даже если у меня есть эта информация, я не понимаю, почему это здесь.

Я свободно разбираюсь в php/C/POSIX/java, но здесь я этого не понимаю.


person Buisson    schedule 15.10.2014    source источник


Ответы (1)


Каждый [ должен быть сопоставлен с другим ]

Поэтому всегда думайте о них парами. Вот как вы их рассуждаете. Когда программа встречает ], она проверяет текущую ячейку. Если в ячейке есть число больше 0, программа возвращается к соответствующему [. Если в текущей ячейке стоит 0, программа продолжается.

[ и ] — это способ создания петель.

Вот простой пример: +++[-] эта программа сначала устанавливает текущую ячейку в 3, а затем очищает ее (часто вы столкнетесь с частью [-], это часть, используемая для установки ячейки в 0, каким бы ни было ее исходное значение). Затем он встречает первый [ и игнорирует его (можете считать его просто маркером). Затем он выполняет -, и первая ячейка теперь становится 2. после этого она встречает ]. Текущая ячейка содержит 2, поэтому, поскольку 2 больше 0, программа возвращается к [. он делает это еще дважды, пока значение в ячейке не станет равным 0. Когда в ячейке содержится 0 и программа снова встречает ], она видит, что текущая ячейка содержит 0, поэтому вместо перехода к [ она позволяет программа продолжится вправо (и поскольку в этой программе больше нет инструкций после ], это означает, что эта крошечная программа завершится)

person Cedric Mamo    schedule 17.10.2014