Я не понимаю эффект квадратной скобки
Я только начал изучать брейкфук, и я только на примере Привет, мир. У меня есть вопрос, для чего используются квадратные скобки?
Пример:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Это программа "Привет, мир". Я не понимаю, почему есть [ ] Я понимаю -
а также +
но я где-то читал, что скобка:
[ (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, поэтому вместо перехода к [
она позволяет программе продолжать движение вправо (и поскольку у этой программы больше нет инструкций после ]
, это означает, что эта крошечная программа закончится)