我正在尝试编写一个程序,根据它们与原点(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
我遇到的问题是我需要能够从最小值构建列表的东西,然后从点列表中消除该值,然后重复。
答案 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)))