データの整列
Posted feedbacks - Common Lisp
Common Lispのsort関数は、大小を比較する関数を指定しますが、
比較する関数さえ変更すれば、多様な比較が可能となっています。
sortはリストを破壊的に変更するので、例では、リストをコピーして引数に与えています。
比較する関数さえ変更すれば、多様な比較が可能となっています。
sortはリストを破壊的に変更するので、例では、リストをコピーして引数に与えています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | *positions*
;=>
((9 . 98) (77 . 0) (17 . 30) (17 . 73) (83 . 3) (81 . 30) (99 . 99)
(90 . 68) (21 . 81) (92 . 29))
;; 辞書順で比較
(sort (copy-list *positions*)
(lambda (x y)
(cond ((< (car x) (car y)) 'T)
((= (car x) (car y)) (< (cdr x) (cdr y)))
('T nil))))
;=>
((9 . 98) (17 . 30) (17 . 73) (21 . 81) (77 . 0) (81 . 30) (83 . 3)
(90 . 68) (92 . 29) (99 . 99))
;; (0, 0)からの距離で比較
(sort (copy-list *positions*)
#'< :key (lambda (x) (expt (+ (car x) (cdr x)) 1/2)))
;=>
((17 . 30) (77 . 0) (83 . 3) (17 . 73) (21 . 81) (9 . 98) (81 . 30)
(92 . 29) (90 . 68) (99 . 99))
|


odz #5839() Rating1/1=1.00
(x, y) の座標情報を以下の2種類の方法で整列する機能を実現してください。
データの表現方法はタプルなり構造体/オブジェクトなり各自で適当に選んで下さい。
[ reply ]