从原点(方案)按值排序的点列表

时间:2013-10-23 22:30:55

标签: list scheme points

我正在尝试编写一个程序,根据它们与原点(0.0)的距离按升序对新列表中的点进行排序。所以,我首先开始说(define origin (cons 0 0))然后,我编写了一个程序,它将最小距离值与原点相对应:

(define (min-distance-origin p pt-list)
  (if (null? pt-list)
      0
      (min (distance (get-first-point pt-list) origin)
           (min-distance-origin (get-rest-points pt-list) origin)))

然后,我采取的下一步实际上是为排序点列表编写程序,但我不太清楚如何去做。

(define (make-sorted-pt-list p pt-list)
(if (null? pt-list)
    0
    (min (min-distance-origin p origin) ; need something that can do (cons min ())
         (make-sorted-pt-list (car (cdr pt-list)) origin)))) ; recursive call

我遇到的问题是我需要能够从最小值构建列表的东西,然后从点列表中消除该值,然后重复。

1 个答案:

答案 0 :(得分:0)

这样的事情会起作用:

#!r6rs
(import (rnrs base)
        (rnrs sorting))

(define (make-sorted-pt-list pt-list)
  (list-sort (lambda (p1 p2) (< (distance-origin p1)
                                (distance-origin p2)))
             pt-list))

您只需要制作distance-origin,这是一个计算原点和提供点之间距离的过程。有了这个,使min很容易:

(define (min-distance-origin pt-list)
  (apply min (map distance-origin pt-list)))