Глубокий взгляд на for

Так называется статья автора PicoLisp - A deeper look at for. Естественно, что этой функции был посвещен пост в рамках “лексического анализа“ и видим, что функция имеет три формы! Автор считает “функцию for одновременно … самой важной и самой сложной функцией управления потоком в PicoLisp … for используется примерно в три раза чаще, чем следующие по популярности функции do и mapcar, и более чем в четыре раза чаще, чем while.” При этом, часто пользуясь условным циклом, сам автор находит эту функцию сложной для понимания, по его же утверждению.
Списки используются в PicoLisp для эмуляции составных структур данных, таких как массивы, деревья, стеки или очереди. В отличие от списков, числа и символы совместно называются «атомами». Обычно CDR каждой ячейки в списке указывает на следующую ячейку, за исключением последней ячейки, которая указывает на NIL. Однако, если CDR последней ячейки указывает на атом, эта ячейка называется «точечной парой» (из-за синтаксиса ввода-вывода с точкой '.' между двумя значениями). Применение for к точечным парам или использование точечных пар в качестве параметров функции и вызывают эти самые трудности для интерпретации записи.
В статье каждой форме автор посвящает два-три примера, считая, что этого достаточно для детализации и разъяснения нюансов. Все переписывать сюда оттуда не имеет смысла и может только дополнительно нагрузить менталитет. Но этим постом акцентируется структура, которая может вызвать дополнительный интерес и стимулировать прочитать лишний раз авторские комментарии да и документацию, пожалуй, тоже.
А здесь, ещё раз, можно напомнить все три формы:
(for sym 'num ['any | (NIL 'any . prg) | (T 'any . prg) ..]) -> any
(for sym|(sym2 . sym) 'lst ['any | (NIL 'any . prg) | (T 'any . prg) ..]) ->
any
(for (sym|(sym2 . sym) 'any1 'any2 [. prg]) ['any | (NIL 'any . prg) | (T 'any
. prg) ..]) -> any
Subscribe to my newsletter
Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Sergey Shishkin
Sergey Shishkin
Всегда чему-то учусь!