16 lines
452 B
Racket
16 lines
452 B
Racket
#lang racket
|
|
(define (dist z0 z1) (magnitude (- z1 z0)))
|
|
(define (dist* zs) (apply dist zs))
|
|
|
|
(define (closest-pair zs)
|
|
(if (< (length zs) 2)
|
|
-inf.0
|
|
(first
|
|
(sort (for/list ([z0 zs])
|
|
(list z0 (argmin (λ(z) (if (= z z0) +inf.0 (dist z z0))) zs)))
|
|
< #:key dist*))))
|
|
|
|
(define result (closest-pair '(0+1i 1+2i 3+4i)))
|
|
(displayln (~a "Closest points: " result))
|
|
(displayln (~a "Distance: " (dist* result)))
|