Не, после WHEN мне ничего не надо. Я боюсь того, что WHILE (а не WHEN) нельзя помещать среди FOR'ов. Но вы их так уверенно записываете в одну компанию, что я опять сомневаюсь. While это main clause же ж? Или это нерелевантно?
Что же касается iterate, гм, давайте не будем об этом. Даже с учётом вышесказанного extended loop мне очень нравится. Если я вдруг стану соблюдать кашрут, потом писать (loop :for x :below something), потом искать глобальный заменитель LOOP -- я стану делать это именно в таком порядке.
Это-то я заметил, но от более глубокого копания 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 в любом месте, но и содержит такие примеры в большом количестве. Судя по тому, что в стандарте таких примеров нет ни одного -- либо всё же они против, либо не успели додумать..)
Comments 6
По-моему, в этом посте указано достаточно причин, чтобы использовать iterate ;) В нем можно свободно перемешивать клозы:
(iter (for x ...)
(while (do-something ...))
(for y ...)
(do-something-other x y))
Reply
Что же касается iterate, гм, давайте не будем об этом. Даже с учётом вышесказанного extended loop мне очень нравится. Если я вдруг стану соблюдать кашрут, потом писать (loop :for x :below something), потом искать глобальный заменитель LOOP -- я стану делать это именно в таком порядке.
Reply
"loop [name-clause] {variable-clause}* {main-clause}* => result*",
нельзя использовать while перед for, т.к. while - это main clause, а for - это variable clause.
Reply
В общем, дело ясное, что дело тёмное... (вот, [не]кстати, CLTL2 не только явно оговаривает допустимость while и until в любом месте, но и содержит такие примеры в большом количестве. Судя по тому, что в стандарте таких примеров нет ни одного -- либо всё же они против, либо не успели додумать..)
Reply
Leave a comment