Есть ли разница между этими макросами? - Lisp

Узнай цену своей работы

Формулировка задачи:

Есть ли какая то разница между этими макросами (В производительности и в коде в который они разворачиваются)? Или же нет. Если говорить о loop или do, то там намного больше разных конструкций, и они более универсальны в плане циклов(все таки встроенные мини-языки циклов ).
Листинг программы
  1. (dolist (i lst) (do-something i))
  2. (loop for i in lst do (do-something i))

Решение задачи: «Есть ли разница между этими макросами?»

textual
Листинг программы
  1. INSOMNIA> (progn
  2.             (pprint "Loop")
  3.             (time (loop
  4.                      repeat 1000
  5.                      do (loop for a in *1000000*)))
  6.             (pprint "Dolist")
  7.             (time (loop
  8.                      repeat 1000
  9.                      do (dolist (a *1000000*) (declare (ignore a))))))
  10.  
  11. "Loop"
  12. Evaluation took:
  13.   2.840 seconds of real time
  14.   2.788000 seconds of total run time (2.788000 user, 0.000000 system)
  15.   98.17% CPU
  16.   6,799,001,607 processor cycles
  17.   32,992 bytes consed
  18.  
  19.  
  20. "Dolist"
  21. Evaluation took:
  22.   2.846 seconds of real time
  23.   2.794000 seconds of total run time (2.794000 user, 0.000000 system)
  24.   98.17% CPU
  25.   6,811,839,198 processor cycles
  26.   33,136 bytes consed
  27.  
  28. NIL

Объяснение кода листинга программы

Код выполняет две операции: первая - это прогон цикла Loop 1000 раз с использованием списка 1000000 в качестве исходных данных, а затем выводит результат. Вторая операция - это прогон цикла Dolist 1000 раз с использованием списка 1000000 в качестве исходных данных, а затем выводит результат. Вот список, описывающий действия:

  1. (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))))))
  2. Loop
    • Оценка заняла: 2.840 секунд реального времени
    • Оценка заняла: 2.788000 секунд общего времени выполнения (2.788000 пользователя, 0.000000 системы)
    • 98.17% CPU
    • 6,799,001,607 циклов процессора
    • 32,992 байт сконсенде
  3. Dolist
    • Оценка заняла: 2.846 секунд реального времени
    • Оценка заняла: 2.794000 секунд общего времени выполнения (2.794000 пользователя, 0.000000 системы)
    • 98.17% CPU
    • 6,811,839,198 циклов процессора
    • 33,136 байт сконсенде
  4. NIL

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы