Lisp 欧氏距离递推函数

Lisp 欧氏距离递推函数,lisp,Lisp,我要写一个递归函数来求给定2个列表的欧几里德距离,这个列表的大小总是相等的。2列表表示向量 下面是我的代码,但我错过了最后一步,那就是在最后一次递归调用后将整个结果平方根。我可以在不引入任何变量的情况下这样做吗 (defun distance (l1 l2) (if (null l1) 0 (+ (expt (- (first l1) (first l2)) 2) (distance (rest l1) (rest l2))))) 编辑:我尝试了建议页

我要写一个递归函数来求给定2个列表的欧几里德距离,这个列表的大小总是相等的。2列表表示向量

下面是我的代码,但我错过了最后一步,那就是在最后一次递归调用后将整个结果平方根。我可以在不引入任何变量的情况下这样做吗

(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)))