2015-01-12 2 views

ответ

3

Вот что происходит:

# >n 0 d 

Эта линия является строка комментария говорю вам, что память должна быть, как перед операцией. Дивиденд как n, делитель как d. Согласно коду, следующие 3 ячейки также должны быть пустыми, но здесь они игнорируются, если по умолчанию у вас пусто.

Для облегчения понимания, я буду теперь использовать 25/4 в качестве примера:

ptr 000 001 002 003 004 005 006 
val 025 000 004 000 000 000 000 

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

Эта линия может быть разбита на части для облегчения наблюдения, но если вы просто используя его, это волшебная петля:

[->+>- 

Эта часть минусов дивиденды, добавляет его на следующую ячейку для сохранения и минусы делитель. Память сейчас:

ptr 000 001 002 003 004 005 006 
val 024 001 003 000 000 000 000 

[>+>>] 

Это добавляет извлеченный один из делителя, для сохранения вновь, так как нам это нужно, чтобы петля назад.

ptr 000 001 002 003 004 005 006 
val 024 001 003 001 000 000 000 

Затем он перемещается 2 шага вправо к ячейке 005, то 006 из-за > между ними, пропуская [+[-<+>]>+>>], так как ячейка пуста, а затем обратно в ячейку 000 из-за этой линии:

<<<<<< 

Дополнительное движение важно, потому что для того, чтобы система не зацикливалась назад, нам нужно перейти в пустое пространство. переход на 006 в основном из-за дополнительного >, который требуется для последующего использования.

Давайте пропустить некоторые шаги, и двигаться вперед, пока не станет делителем 0.

ptr 000 001 002 003 004 005 006 
val 021 004 000 003 000 000 000 

Он пропускает [>+>>] поскольку ячейка 2 пуста сейчас, а затем она перемещается в ячейку 003.

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

С 003 имеет значение, он должен запустить эту линию. добавляя его к значению, чтобы сделать его полным циклом, затем сдвиньте значение до 002 с помощью [-<+>]. Указатель заканчивается на 003, поэтому он перемещается в 004 и добавляет значение на единицу, чтобы указать полный цикл и, следовательно, еще один для частного. Он перемещается в 006 и обратно в 000.

Повторите все это, то мы получим:

ptr 000 001 002 003 004 005 006 
val 000 025 003 001 006 000 000 

которая подобна последней строке

# >0 n d-n%d n%d n/d 

как петля заканчивается, потому что 000 теперь пуст. n теперь полностью сдвинуто на 001, 002 и 003 показывает цикл цикла делителя, когда n полностью обнулено. 004 показывает полную завершенную итерацию цикла делителя.