Возможно, лучшим подходом к проблеме было бы сосредоточиться на желаемой точности, а не на количестве повторений.Таким образом, вы можете итеративно улучшать частичный результат, пока уровень улучшения не станет ниже точности.Я считаю макрос do
особенно подходящим для такого типа вычислений.Вы можете подойти к проблеме следующим образом:
(defun golden-ratio (start delta)
"Calculate the golden ratio starting at START with accuracy
DELTA."
(do ((old (float start))
(new (1+ (/ (float start))) (1+ (/ new))))
((< (abs (- old new)) delta) new)
(setq old new)))
Таким образом, вы можете сделать:
ELISP> (golden-ratio 1 1.0e-40)
1.618033988749895