Наши интеллектуальные способности скорее приспособлены для управления статическими отношениями, а наши способности визуализировать процессы, развивающиеся во времени, развиты относительно слабо.
- Эдгар Дейкстра: Заявление о переходе считается вредным
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] Википедия: Управление потоком
[3] Эдгар Дейкстра: Заявление о переходе считается вредным
[4] Анри Бергсон. (1889 г.). Время и свобода воли
[5] Гарольд Абельсон, Джеральд Джей Сассман, Джули Сассман. (1996). Структура и интерпретация компьютерной программы