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

时间:2013-10-23 21:35:55

标签: 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-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))不适用,这使我相信它正在工作直到它到达最后点。

2 个答案:

答案 0 :(得分:1)

问题出现在max-range

的这一行
(max-distance (car pt-list) (pt-list))

应该是:

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

请注意,您必须传递列表,而不是应用它(它不是函数)。这就是错误指向的内容。

答案 1 :(得分:0)

我认为你忽略了使用cdr。在您致电max-range的{​​{1}}函数中,该调用的参数应为max-distance的{​​{1}}和car。就这样:

cdr

你在第二个参数上使用pt-list,因为没有理由重新计算(define (max-range pt-list) (if (null? pt-list) 0 (max (max-distance (car pt-list) (cdr pt-list)) (max-range (cdr pt-list))))) 的距离(它将为零而不是最大值)。