Extended loop: for .. while .. for

Sep 01, 2010 05:32

Никак не могу понять одной вещи про extended loop -- прямо мозги вытекают ( Read more... )

Leave a comment

Comments 6

dmitry_vk September 1 2010, 07:19:29 UTC
Если я правильно помню, то for, while и пр. не могут идти после указания действий цикла, поэтому после when уже нельзя поставить for.

По-моему, в этом посте указано достаточно причин, чтобы использовать iterate ;) В нем можно свободно перемешивать клозы:

(iter (for x ...)
(while (do-something ...))
(for y ...)
(do-something-other x y))

Reply

akovalenko September 1 2010, 07:40:05 UTC
Не, после WHEN мне ничего не надо. Я боюсь того, что WHILE (а не WHEN) нельзя помещать среди FOR'ов. Но вы их так уверенно записываете в одну компанию, что я опять сомневаюсь. While это main clause же ж? Или это нерелевантно?

Что же касается iterate, гм, давайте не будем об этом. Даже с учётом вышесказанного extended loop мне очень нравится. Если я вдруг стану соблюдать кашрут, потом писать (loop :for x :below something), потом искать глобальный заменитель LOOP -- я стану делать это именно в таком порядке.

Reply

dmitry_vk September 1 2010, 07:59:30 UTC
Судя по грамматике:

"loop [name-clause] {variable-clause}* {main-clause}* => result*",

нельзя использовать while перед for, т.к. while - это main clause, а for - это variable clause.

Reply

akovalenko September 1 2010, 08:39:50 UTC
Это-то я заметил, но от более глубокого копания CLHS остаётся впечатление, что эта грамматика не является нормативной, а имеет поясняющую роль. Вот, например, в 6.1.4. видим: «Termination-test control constructs can be used anywhere within the loop body». А ведь stepping clauses *являются* частью loop body (в отличие от with/finally/initially). И спрашивается, кто их за язык тянул насчёт can be used anywhere, и *что* бы это должно означать, если это не о for..while..for?

В общем, дело ясное, что дело тёмное... (вот, [не]кстати, CLTL2 не только явно оговаривает допустимость while и until в любом месте, но и содержит такие примеры в большом количестве. Судя по тому, что в стандарте таких примеров нет ни одного -- либо всё же они против, либо не успели додумать..)

Reply


Leave a comment

Up