Lisp 欧氏距离递推函数
我要写一个递归函数来求给定2个列表的欧几里德距离,这个列表的大小总是相等的。2列表表示向量 下面是我的代码,但我错过了最后一步,那就是在最后一次递归调用后将整个结果平方根。我可以在不引入任何变量的情况下这样做吗Lisp 欧氏距离递推函数,lisp,Lisp,我要写一个递归函数来求给定2个列表的欧几里德距离,这个列表的大小总是相等的。2列表表示向量 下面是我的代码,但我错过了最后一步,那就是在最后一次递归调用后将整个结果平方根。我可以在不引入任何变量的情况下这样做吗 (defun distance (l1 l2) (if (null l1) 0 (+ (expt (- (first l1) (first l2)) 2) (distance (rest l1) (rest l2))))) 编辑:我尝试了建议页
(defun distance (l1 l2)
(if (null l1)
0
(+ (expt (- (first l1) (first l2)) 2)
(distance (rest l1) (rest l2)))))
编辑:我尝试了建议页面中的答案,但在测试时出错。
它表示变量SQ-EUCLIDEAN-DISTANCE是未绑定的。
(defun sq-euclidean-distance-rec (p q)
(if (null p)
0
(+ (expt (- (first p) (first q)) 2)
(sq-euclidean-distance-rec (rest p) (rest q)))))
(defun euclidean-distance-rec (p q) (sqrt sq-euclidean-distance p q))
你有没有看过前一段时间的问题:@jkiiski谢谢你的推荐。但我仍然面临一些问题,从中得到了答案。编辑:只是一些括号问题。更改为
(defun euclid distance(pq)(sqrt(sq euclid distance pq))
尝试将(sqrt sq euclide distance pq)
更改为(sqrt(sq euclide distance rec pq))
我不知道这是什么语言(几乎是Python),但这绝对不是常见的Lisp或Scheme。我不介意你用另一种语言给出家庭作业问题的答案,但我认为你的答案是错误的:sqrt(x1+sqrt(x2+…(sqrt-xn))
通常不等于sqrt(x1+…+xn)
,是吗?根据给定的公式,我的答案是正确的。@MajeedSiddiqui否。参见
func distance(l1, l2):
if l1 == null || l2 == null
return 0
else
return sqrt((l1.first - l2.first) * (l1.first - l2.first) + distance(rest(l1), rest(l2)))