2017-01-27 3 views
4

В Common Lisp, в макро цикле, и и как ключевые слова, по всей видимости функционируют одинаково:Есть ли разница между ключевыми словами «for» и «as» в макросе цикла?

(loop for i from 1 to 3 do (print i)) 
(loop as i from 1 to 3 do (print i)) 

Есть некоторые тонкие различия я не хватает? Если нет, зачем беспокоиться о двух разных одинаковых ключевых словах?

ответ

7

6.1.2.1 Iteration Control:

В for и as ключевые слова являются синонимами; они могут использоваться взаимозаменяемо. ... По соглашению, for вводит новые итерации, а as вводит итерации, которые зависят от предыдущей спецификации итерации.

т.д .:

(loop for x from 1 to 10 
    as x2 = (* x x) 
    as x4 = (* x2 x2) 
    for y from 10 downto 1 
    as y2 = (* y y) 
    as y4 = (* y2 y2) 
    sum (* x4 y4)) 

Почему ?!

Традиция! :-)

А также ...

»... компьютер язык это не просто способ получить компьютер для выполнения операций, а ... это роман формальной среды для выражения идей о методологии » Абельсон/Суссман« Структура и интерпретация компьютерных программ ».

IOW, мы пишем код для людей (включая вас через 6 месяцев) для чтения, а не только для компьютеров, которые нужно выполнить.

Все, что делает ваш код более читаемым, - «честная игра».

+1

Aaand теперь у меня есть песня из «Fiddler on the Roof», застрявшей у меня в голове. –

+0

как насчет примера? –

+0

@RainerJoswig: хорошо ли это сейчас? или вы имели в виду «пример чтения жизни» из реального проекта? – sds