Scheme 查找列表中最远两点的方法(方案)

Scheme 查找列表中最远两点的方法(方案),scheme,distance,Scheme,Distance,我试图编写一个过程,返回列表中最远两点之间的最长距离。我的名单是 ((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1)) 我已经写了一个距离过程,一个返回两点之间最大距离的过程: (define (max-distance p pt-list) (if (null? pt-list) 0 (max (distance p (car pt-list)) (max-distanc

我试图编写一个过程,返回列表中最远两点之间的最长距离。我的名单是

((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1))
我已经写了一个距离过程,一个返回两点之间最大距离的过程:

(define (max-distance p pt-list)
    (if (null? pt-list)
        0
        (max (distance p (car pt-list))
             (max-distance p (cdr pt-list)))))  
现在,我只需要写一些东西,只返回取其中两个点得到的最大值。到目前为止,我得到的是

 (define (max-range pt-list)
     (if (null? pt-list)
         0
         (max (max-distance (car pt-list) (pt-list))
              (max-range (cdr pt-list)))))

但是,当我运行测试用例
(display+(max range my pt list))
时,我得到了一个错误:对象((0.-1))不适用,这使我相信它一直工作到最后一点。

问题在
max range
中的这一行:

(max-distance (car pt-list) (pt-list))
应该是:

(max-distance (car pt-list) pt-list)

请注意,您必须传递列表,而不是应用它(它不是函数)。这就是错误所在。

我认为您忽略了使用
cdr
。在您调用的
max range
函数中
max distance
-该调用的参数应该是
pt list的
car
cdr
。因此:

(define (max-range pt-list)
  (if (null? pt-list)
      0
      (max (max-distance (car pt-list) (cdr pt-list))
           (max-range (cdr pt-list)))))
在第二个参数上使用
cdr
,因为没有理由重新计算
(车辆pt列表)
的距离(它将为零,并且永远不会是最大值)