Я пытаюсь найти расстояние между двумя точками в 3D пространстве:операция Схема выполняется рекурсивно вместо только один раз
Вот мой код:
(define (helper p1 p2)
(if (null? p1)
0
(+ (distTo3D (cdr p1) (cdr p2))
(expt (- (car p1) (car p2)) 2))))
(define (distTo3D p1 p2)
(sqrt (helper p1 p2)))
Я думал, что определение помощника может сделать так, чтобы sqrt
вызывался только от элемента, который возвращается в конце вспомогательной функции. Однако, позвонив так:
(distTo3D '(1 1 1) '(2 2 2))
Это неверный ответ. Попытавшись некоторое время, я увидел, что он возвращает sqrt(sqrt(1) + sqrt(2))
, как если бы sqrt был частью самого рекурсивного оператора.
Как я могу изменить свой код так, чтобы он вызывал только sqrt на последнем элементе, возвращаемом помощником?
Это обычно называть '' helper' из helper'. Или вы получаете '(sqrt (+ (sqrt (+ (sqrt (+ (sqrt 0) (expt ...)) (expt ...)) (expt ...)))' – Sylwester