Наши интеллектуальные способности скорее приспособлены для управления статическими отношениями, а наши способности визуализировать процессы, развивающиеся во времени, развиты относительно слабо.

- Эдгар Дейкстра: Заявление о переходе считается вредным

for здесь относится к циклу, включает в себя различные ключевые слова на разных языках, такие как do…while, while и т. д. Может также включать Генераторы.

перечисление

Предположим, что есть две функции с именами bar и foo соответственно. foo — это функция черного ящика, которая возвращает логическое значение. bar можно описать как принятие одного параметра a и выполнение последовательности операций ИЛИ над foo. В этом случае мы точно знаем, что bar сработает дважды ИЛИ для трех foo. Такие три foo соответственно получили бы параметры приращения в зависимости от a.

Предположим, что есть еще одна функция с именем baz, которую можно описать как принимающую два параметра a, b и выполняющую последовательность операций ИЛИ над foo. В этом случае неясно, сколько раз будет выполняться функция foo и сколько раз будет выполняться операция ИЛИ. Все зависит от параметра b.

Приведенные выше два случая не имеют разницы в основном логическом потоке. Единственное отличие состоит в том, что в первом случае ясно, сколько раз выполняется foo, а во втором случае — нет.

«for» — это подход перечисления в абстракции.

В своей предыдущей статье я упомянул, что если можно рассматривать как предикат. Так как для — это абстракция, это также может быть.

Визуализация

Типичная блок-схема цикла может выглядеть так, как показано ниже. Вы должны понять логику цикла, пройдя каждый шаг. Это временной подход и недостаточно интуитивный. Я представлю мощный инструмент — дерево.

Мы освежили наше понимание того, что for — это перечисление. Это хорошее начало для знакомства с деревом.

определение последовательности Фибоначчи следующее:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), for N > 1.

На каждом шаге рекурсии случаи могут быть пронумерованы. Базовый вариант — F(0) = 0, F(1) = 1, остальные — F(N) = F(N — 1) + F(N — 2). Если проиллюстрировать логику рекурсивного перечисления с помощью рекурсивного дерева, то теперь оно получается интуитивно понятным:

Поскольку «для» — это перечисление, мы можем проиллюстрировать логику, включая «для», с помощью дерева. Это было бы еще более интуитивно понятно.

Божья воля и свободная воля

«для» можно рассматривать как структуру, которая является концептуальной структурой, которую мы, люди, ожидаем, от нее. прежде чем делегировать структуру машине, она всегда статична. После обработки в процедуру она наполняется жизнью и становится динамичной, а это означает, что при обработке будут различные возможности. Однако он не выйдет за статичные рамки. Отношения между статической программой и динамическим процессом точно такие же, как отношения между волей Бога и свободной волей.

Божья воля стоит за пространством, свободная воля стоит за временем

Свобода воли становится возможной со временем, тогда как мы всегда чувствуем время в определенной точке (пространстве).

Как работает Свобода воли?

Следование за временем кажется верхушкой айсберга. Это не вся правда, нам нужно углубиться в детали. В моей предыдущей статье я указал, что если имеет значение в каноническом рекурсивном шаблоне. Так как любую рекурсивную процедуру можно превратить в структуру цикла (все основано на индукции).Таким образом, мы также можем заключить, что если может иметь значение в цикле. структура. Но также есть два примитивных элемента, которые также имеют значение — break & continue. Они находятся под управлением for, в отличие от инструкции goto.

Ссылка

[1] Википедия: Управление потоком

[2] Википедия: Генератор

[3] Эдгар Дейкстра: Заявление о переходе считается вредным

[4] Анри Бергсон. (1889 г.). Время и свобода воли

[5] Гарольд Абельсон, Джеральд Джей Сассман, Джули Сассман. (1996). Структура и интерпретация компьютерной программы