0

我正在尝试编写一个程序,根据它们与原点的距离(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

我遇到的问题是我需要一些可以从最小值构造列表的东西,然后从点列表中消除该值,然后重复。

4

1 回答 1

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

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

(define (min-distance-origin pt-list)
  (apply min (map distance-origin pt-list)))
于 2013-10-23T23:25:39.873 回答