【发布时间】:2015-04-19 18:26:12
【问题描述】:
我正在尝试找出 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 ...)))
标签: functional-programming scheme