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

作成する必要があるのはdistance-origin、原点と指定された点の間の距離を計算する手順です。これにより、min を簡単に作成できます。

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