Fix small mistackes.

This commit is contained in:
TheDmitry 2015-01-13 19:19:24 +03:00
parent a7918fb33c
commit 4fc9c89f64

View File

@ -12,10 +12,10 @@ Brainfuck (пишется маленькими буквами, кроме нач
маленький Тьюринг-полный язык программирования лишь с 8 командами. маленький Тьюринг-полный язык программирования лишь с 8 командами.
``` ```
Любой символ игнорируется кроме "><+-.,[]" (исключая кавычки). Любой символ, кроме "><+-.,[]", игнорируется, за исключением кавычек.
Brainfuck представлен массивом из 30000 ячеек, инициализированных нулями, Brainfuck представлен массивом из 30000 ячеек, инициализированных нулями,
и указателем, указывающего на текущую ячейку. и указателем с позицией в текущей ячейке.
Всего восемь команд: Всего восемь команд:
+ : Увеличивает значение на единицу в текущей ячейке. + : Увеличивает значение на единицу в текущей ячейке.
@ -29,22 +29,22 @@ Brainfuck представлен массивом из 30000 ячеек, ини
] : Если значение в текущей ячейке равно нулю, то перейти к следующей инструкции. ] : Если значение в текущей ячейке равно нулю, то перейти к следующей инструкции.
В противном случае, вернуться назад к соответствующей [ . В противном случае, вернуться назад к соответствующей [ .
[ и ] образуют цикл while. Очевидно, они должны быть сбалансированы. [ и ] образуют цикл while. Естественно, они должны быть сбалансированы.
Давайте рассмотрим некоторые базовые brainfuck программы. Давайте рассмотрим некоторые базовые brainfuck-программы.
++++++ [ > ++++++++++ < - ] > +++++ . ++++++ [ > ++++++++++ < - ] > +++++ .
Эта программа выводит букву 'A'. Сначала, программа увеличивает значение Эта программа выводит букву 'A'. Сначала программа увеличивает значение
ячейки №1 до 6. Ячейка #1 будет использоваться циклом. Затем, программа входит ячейки №1 до 6. Ячейка №1 будет использоваться циклом. Затем программа входит
в цикл ([) и переходит к ячейке №2. Ячейка №2 увеличивается до 10, переходим в цикл ([) и переходит к ячейке №2. Ячейка №2 увеличивается до 10, переходим
назад к ячейке №1 и уменьшаем ячейку №1. Этот цикл проходит 6 раз (ячейка №1 назад к ячейке №1 и уменьшаем ячейку №1. Этот цикл проходит 6 раз (ячейка №1
уменьшается до нуля, и с этого места пропускает инструкции до соответствующей ] уменьшается до нуля, и с этого места пропускает инструкции до соответствующей ]
и идет дальше). и идет дальше).
В этот момент, мы в ячейке №1, которая имеет значение 0, значение ячейки №2 В этот момент мы находимся в ячейке №1, которая имеет значение 0, значение
пока 60. Мы переходим на ячейку №2, увеличиваем 5 раз, до значения 65, и затем ячейки №2 пока 60. Мы переходим на ячейку №2, увеличиваем 5 раз, до значения 65,
выводим значение ячейки №2. Код 65 является символом 'A' в кодировке ASCII, и затем выводим значение ячейки №2. Код 65 является символом 'A' в кодировке ASCII,
так что 'A' выводится на терминал. так что 'A' выводится на терминал.
@ -53,11 +53,11 @@ Brainfuck представлен массивом из 30000 ячеек, ини
Данная программа считывает символ из пользовательского ввода и копирует символ Данная программа считывает символ из пользовательского ввода и копирует символ
в ячейку №1. Затем мы начинаем цикл. Переходим к ячейке №2, увеличиваем значение в ячейку №1. Затем мы начинаем цикл. Переходим к ячейке №2, увеличиваем значение
ячейки №2, идем назад к ячейке №1 и уменьшаем значение ячейки №1. Это продолжается ячейки №2, идем назад к ячейке №1 и уменьшаем значение ячейки №1. Это продолжается
до тех пор пока, ячейка №1 не равна 0, а ячейка №2 сохраняет старое значение до тех пор, пока ячейка №1 не равна 0, а ячейка №2 сохраняет старое значение
ячейки №1. Мы завершаем цикл на ячейке №1, поэтому переходим в ячейку №2, и ячейки №1. Мы завершаем цикл на ячейке №1, поэтому переходим в ячейку №2 и
затем выводим символ ASCII. затем выводим символ ASCII.
Также, имейте в виду, что пробелы здесь исключительно для читабельности. Вы можете Также имейте в виду, что пробелы здесь исключительно для читабельности. Вы можете
легко написать и так: легко написать и так:
,[>+<-]>. ,[>+<-]>.
@ -71,13 +71,13 @@ Brainfuck представлен массивом из 30000 ячеек, ини
Суть в том, что программа сначала читает два ввода. Затем начинается внешний цикл, Суть в том, что программа сначала читает два ввода. Затем начинается внешний цикл,
сохраняя ячейку №1. Затем программа перемещается в ячейку №2, и начинается сохраняя ячейку №1. Затем программа перемещается в ячейку №2, и начинается
внутренний цикл с сохранением ячейки №2, увеличивая ячейку №3. Однако появляется внутренний цикл с сохранением ячейки №2, увеличивая ячейку №3. Однако появляется
проблема: В конце внутреннего цикла, ячейка №2 равна нулю. В этом случае, проблема: В конце внутреннего цикла ячейка №2 равна нулю. В этом случае,
внутренний цикл не будет работать уже в следующий раз. Чтобы решить эту проблему, внутренний цикл не будет работать уже в следующий раз. Чтобы решить эту проблему,
мы также увеличим ячейку №4, а затем копируем ячейку №4 в ячейку №2. мы также увеличим ячейку №4, а затем копируем ячейку №4 в ячейку №2.
Итак, ячейка №3 - результат. Итак, ячейка №3 - результат.
``` ```
Это и есть brainfuck. Не так уж сложно, правда? Забавы ради, вы можете написать Это и есть brainfuck. Не так уж сложно, правда? Забавы ради, вы можете написать
свою собственную brainfuck программу или интерпретатор на другом языке. свою собственную brainfuck-программу или интерпретатор на другом языке.
Интерпретатор достаточно легко реализовать, но если вы мазохист, попробуйте Интерпретатор достаточно легко реализовать, но если вы мазохист, попробуйте
написать brainfuck интерпретатор... на языке brainfuck. написать brainfuck-интерпретатор... на языке brainfuck.