Мне немного непонятно, как (скажем) list
и make-list
можно сравнивать, поскольку они имеют совершенно разные цели.Тот факт, что они оба возвращают список, не делает их похожими или сопоставимыми.
Следовательно, предположим, что кто-то хочет получить представление о том, как работает make-list
.Следующий код делает это:
* (let ((lst (time (make-list 10000000 :initial-element 0)))) (if lst t nil))
Evaluation took:
0.344 seconds of real time
0.343750 seconds of total run time (0.187500 user, 0.156250 system)
[ Run times consist of 0.251 seconds GC time, and 0.093 seconds non-GC time. ]
100.00% CPU
1,129,211,079 processor cycles
160,170,016 bytes consed
T
* (let ((lst (time (make-list 10000000 :initial-element 0)))) (if lst t nil))
Evaluation took:
0.188 seconds of real time
0.187500 seconds of total run time (0.125000 user, 0.062500 system)
[ Run times consist of 0.139 seconds GC time, and 0.049 seconds non-GC time. ]
100.00% CPU
632,759,465 processor cycles
160,195,440 bytes consed
T
* (let ((lst (time (make-list 10000000 :initial-element 0)))) (if lst t nil))
Evaluation took:
0.343 seconds of real time
0.343750 seconds of total run time (0.187500 user, 0.156250 system)
[ Run times consist of 0.266 seconds GC time, and 0.078 seconds non-GC time. ]
100.29% CPU
1,151,984,724 processor cycles
160,170,016 bytes consed
T
* (let ((lst (time (make-list 10000000 :initial-element 0)))) (if lst t nil))
Evaluation took:
0.203 seconds of real time
0.203125 seconds of total run time (0.171875 user, 0.031250 system)
[ Run times consist of 0.140 seconds GC time, and 0.064 seconds non-GC time. ]
100.00% CPU
648,536,502 processor cycles
160,195,520 bytes consed
T
Первое, на что нужно обратить внимание, это то, что время выполнения не согласовано, потому что в системе слишком много других «случайных» действий (например, GC).Что еще более важно, как мы теперь пишем 10 000 000 списков нулей для передачи на list
для сравнения?Используем ли мы цикл (в этом случае это цикл, который мы (в основном) будем синхронизировать)?Создаем ли мы сначала напечатанное представление в виде 1000000 длинных списков с нулями, которые затем будут считываться с read
(в этом случае мы будем (в основном) рассчитывать время создания печатного представления и читателя lisp)?Выглядит как яблоки и апельсины ...