challenge データの整列

(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。

  • (x, y) の辞書順(まず x で昇順に整列して、x が同じデータに対して y で昇順に整列する)
  • (0, 0) からの距離の昇順

データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。

Posted feedbacks - Scheme

実行例:
gosh> (sort-c '((1 . 2) (3 . 5) (4 . 2) (3 . 1) (2 . 7)) 'dic)
((1 . 2) (2 . 7) (3 . 1) (3 . 5) (4 . 2))

gosh> (sort-c '((1 . 2) (3 . 5) (4 . 2) (3 . 1) (2 . 7)) 'dist)
((1 . 2) (3 . 1) (4 . 2) (3 . 5) (2 . 7))
1
2
3
4
5
6
7
(define (sort-c ls sym)
  (cond ((eq? sym 'dic)
         (sort ls (lambda (x y) (if (= (car x) (car y)) (< (cdr x) (cdr y)) (< (car x) (car y))))))
        ((eq? sym 'dist)
         (sort ls (lambda (x y) (< (sqrt (+ (expt (car x) 2) (expt (cdr x) 2)))
                                   (sqrt (+ (expt (car y) 2) (expt (cdr y) 2)))))))
        (else (error "ソートのしかたを指定してください。"))))

Index

Feed

Other

Link

Pathtraq

loading...