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

Sergey ShishkinSergey Shishkin
2 min read

Так называется статья автора 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

https://picolisp.tiddlyhost.com/#for

0
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

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