2013-10-01 4 views
0

Я хочу, чтобы установить переменный в вычислительное время как этотЗначение переменной Setf для вычисления времени?

(setf a (time (+ 1 1))) 

но вместо времени я получаю это

Break 1 [7]> a 
2 

Как может установить для вычисления времени?

+0

в вашем вопросе последней строки 'Как я устанавливаю для вычисления времени' не является правильным, пожалуйста, сделать правильный – Jageen

+0

Это позволяет предположить, что 'a' нет? определены. Вы это определили? –

+0

Определяется, но неверно. – boucekv

ответ

5

См. Ответ Ларса.

TIME записывает информацию, зависящую от реализации, к выходу трассировки. Если вы хотите его вывод в виде строки:

(with-output-to-string (*trace-output*) 
    (time (+ 1 1))) 
6

Использование GET-INTERNAL-RUN-TIME (или GET-INTERNAL-REAL-TIME):

(setf a 
     (let ((start (get-internal-run-time))) 
     (+ 1 1) ;This is the computation you want to time. 
     (- (get-internal-run-time) start))) 

Деление на INTERNAL-TIME-UNITS-PER-SECOND, если вы хотите результат в секундах.

Возможно, вы захотите сделать функцию или макрос, если вы сделаете это много.

+3

Возможно, было бы полезно убедиться, что компилятор не удалил вычисление, поскольку он не создает побочных эффектов, может быть вычислен во время компиляции и/или результат не используется. –

Смежные вопросы