LINUX.ORG.RU
ФорумTalks

Brainfuck - Википедия.


0

0

Уже третий раз кто-то исправляет моё исправление в английской википедии в статье про brainfuck.

Рассудите, кто из нас неправ. Несовпадение мнений у нас по поводу двух операторов: [ и ].

[ - if the byte at the data pointer is zero, then instead of moving the instruction pointer forward to the next command, jump it forward to the command after the matching ] command.

] - if the byte at the data pointer is nonzero, then instead of moving the instruction pointer forward to the next command, jump it back to the command after the matching [ command.

Я считаю, что аналогом этих операторов в Си буду конструкции:

] - if (*p) do {

[ - } while(*p);

В статье же постоянно исправляется на

[ - while (*ptr) {

] - }

This article is a very important one.

subj

Sekai
()

Конструкции практически эквивалентны. Но твой вариант значительно сложнее для чтения. Поэтому ты не прав. И поправь русскую вику.

Manhunt ★★★★★
()

Разница?

Что за проявление ГСМ? Экспериментальном можешь подтвердить, что то что есть в Википедии неверно, а то что у тебя верно? Всего-то надо кусок кода на Brainfuck'е и два куска на C.

Camel ★★★★★
()
Ответ на: комментарий от NightmareZ

Фигурные скобочки больше нигде не встречаются. Поэтому проверку заведомо выполнит оператор while.

Manhunt ★★★★★
()
Ответ на: Разница? от Camel

Экспериментальном можешь подтвердить

Да блин, в описании обоих операторов (и [ и ]) ясно написано, что у них есть проверка на нулевой указатель. У обоих. У обоих должен быть или if или while....

NightmareZ
() автор топика
Ответ на: Разница? от Camel

> Экспериментальном можешь подтвердить, что то что есть в Википедии неверно, а то что у тебя верно? Всего-то надо кусок кода на Brainfuck'е и два куска на C.

Точно. Контр-пример в студию :)

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Прочитай описание оператора ]. В нём тоже должна быть проверка на нулевой указатель. И, если он не нуль, то вернуться назад к [.

В случае с if (*p) do { ... } while(*p); как раз две проверки будут.

NightmareZ
() автор топика
Ответ на: комментарий от NightmareZ

> Да блин, в описании обоих операторов (и [ и ]) ясно написано, что у них есть проверка на нулевой указатель.

И семантически она есть у ']' в обеих конструкциях. Синтаксически есть только в твоей, но это твои личные проблемы непонимания семантики языка.

Manhunt ★★★★★
()
Ответ на: комментарий от NightmareZ

> Прочитай описание оператора ]. В нём тоже должна быть проверка на нулевой указатель. И, если он не нуль, то вернуться назад к [.

В цикле «while(*p) { ... }» именно так и происходит.

Manhunt ★★★★★
()

Что за тупость?? Эти конструкции эквиваленты! Объяснять почему, не буду, потому что, если человек знает Си, то это очевидно.

vkos ★★
()

конструкции эквивалентны. твоя сложнее для чтения и избыточна, но ближе к оригиналу.

iSage ★★★★
()

Уже третий раз кто-то исправляет моё исправление в английской википедии в статье про brainfuck.


в английской википедии


Чего ты туда лезешь-то?

elf
()

ты не прав, успокойся

beastie ★★★★★
()
Ответ на: комментарий от NightmareZ

и вообще, не можеш срать — не мучай жопу. и выучи уже C для начала, прежде чем лезть исправлять то, чего не знаеш.

beastie ★★★★★
()

Конструкции эквивалентны, так что оператор ] можно считать как условным переходом к [, так и безусловным... В случае, если делать проверку у обоих операторов плюс есть — симметричность. В C будет правильней оставить проверку только в одном месте.

Xenius ★★★★★
()
Ответ на: комментарий от question4

while (expr) {} проверяет expr перед выполнением блока, do {} while (expr) - после. А двойной проверки не было там никогда. Так что формально ТС прав. Но код его менее читабелен, да.

eugene2k
()
Ответ на: комментарий от eugene2k

> while (expr) {} проверяет expr перед выполнением блока, do {} while (expr) - после.

while (expr) {}
проверяет expr,
выполняет блок,
переходин на проверку...

В точке проверки снова проверяет expr, и либо переходит к новому выполнению блока, либо не переходит. Двойной проверки в явном виде нет, но проверка после выполнения блока производится всегда.

Или не так?

question4 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.