Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 按原点值排序的点列表(方案)_List_Scheme_Points - Fatal编程技术网

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