Есть ли разница между этими макросами? - Lisp
Формулировка задачи:
Есть ли какая то разница между этими макросами (В производительности и в коде в который они разворачиваются)? Или же нет. Если говорить о loop или do, то там намного больше разных конструкций, и они более универсальны в плане циклов(все таки встроенные мини-языки циклов ).
(dolist (i lst) (do-something i)) (loop for i in lst do (do-something i))
Решение задачи: «Есть ли разница между этими макросами?»
textual
Листинг программы
INSOMNIA> (progn (pprint "Loop") (time (loop repeat 1000 do (loop for a in *1000000*))) (pprint "Dolist") (time (loop repeat 1000 do (dolist (a *1000000*) (declare (ignore a)))))) "Loop" Evaluation took: 2.840 seconds of real time 2.788000 seconds of total run time (2.788000 user, 0.000000 system) 98.17% CPU 6,799,001,607 processor cycles 32,992 bytes consed "Dolist" Evaluation took: 2.846 seconds of real time 2.794000 seconds of total run time (2.794000 user, 0.000000 system) 98.17% CPU 6,811,839,198 processor cycles 33,136 bytes consed NIL
Объяснение кода листинга программы
Код выполняет две операции: первая - это прогон цикла Loop
1000 раз с использованием списка 1000000 в качестве исходных данных, а затем выводит результат. Вторая операция - это прогон цикла Dolist
1000 раз с использованием списка 1000000 в качестве исходных данных, а затем выводит результат.
Вот список, описывающий действия:
- (progn
(pprint
Loop
) (time (loop repeat 1000 do (loop for a in 1000000))) (pprintDolist
) (time (loop repeat 1000 do (dolist (a 1000000) (declare (ignore a)))))) Loop
- Оценка заняла: 2.840 секунд реального времени
- Оценка заняла: 2.788000 секунд общего времени выполнения (2.788000 пользователя, 0.000000 системы)
- 98.17% CPU
- 6,799,001,607 циклов процессора
- 32,992 байт сконсенде
Dolist
- Оценка заняла: 2.846 секунд реального времени
- Оценка заняла: 2.794000 секунд общего времени выполнения (2.794000 пользователя, 0.000000 системы)
- 98.17% CPU
- 6,811,839,198 циклов процессора
- 33,136 байт сконсенде
- NIL
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д