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



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

((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-listcarcdr。 因此:

(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,因为没有理由重新计算(car pt-list)的距离(它将为零,永远不会是最大值)。

最新更新