Следующий код предназначен для отсчета времени от заданного времени ожидания, а затем оценить прилагаемую форму:Призыва к EVAL оценивается в результате части DO до DO работает
(defun wait (seconds form)
(let ((end (+ (get-universal-time) seconds)))
(do()
((>= (get-universal-time) end)
(eval form))
(sleep 1))))
Если я бег:
(wait 5 (format t "output"))
В результате «вывод» будет отправлен на stdout перед подсчетом. После вывода «выхода» программа по-прежнему отсчитывает, как обычно.
я получить ожидаемые результаты, в которых «выход» отправляется на стандартный вывод ПОСЛЕ завершения обратного отсчета, с помощью следующего кода:
(defun wait (seconds form)
(let ((end (+ (get-universal-time) seconds)))
(do()
((>= (get-universal-time) end)
(format t "output"))
(sleep 1))))
Почему бы вызов EVAL в цикле DO быть оценки, когда цикл DO объявлен, но непосредственная вставка оцениваемой формы заставляет его ждать до момента результата?