List 按原点值排序的点列表(方案)
我正在尝试编写一个过程,根据点与原点的距离按升序对新列表中的点进行排序List 按原点值排序的点列表(方案),list,scheme,points,List,Scheme,Points,我正在尝试编写一个过程,根据点与原点的距离按升序对新列表中的点进行排序(0.0)。因此,我首先说(定义原点(cons 0)),然后,我编写了一个过程,该过程取到原点的最小距离值: (define (min-distance-origin p pt-list) (if (null? pt-list) 0 (min (distance (get-first-point pt-list) origin) (min-distance-origin (ge
(0.0)
。因此,我首先说(定义原点(cons 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
我遇到的问题是,我需要一些可以从最小值构造列表的东西,然后从点列表中删除该值,然后重复。类似的东西可以工作:
#!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))
我想你会发现它总是返回
0
。最终,您到达返回0
的基本情况,然后从那里发出一个调用,您将执行(min 0)
,并且0
将一直工作到备份。0
的可能副本具有列表的内置排序。使用它,只需定义一个自定义谓词(定义(生成已排序的pt列表)(排序(lambda(xy)(<(距离原点x)(距离原点y)))pt列表))
(define (min-distance-origin pt-list)
(apply min (map distance-origin pt-list)))