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

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

Пример:

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

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

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

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

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

1 ответ

Решение

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

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

[и] способ сделать петли.

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

Другие вопросы по тегам