Encontrar la distancia máxima entre dos puntos en una lista (esquema)
Actualmente estoy intentando escribir una función desde una lista de puntos que devuelve la distancia desde un punto p a un punto en mi lista de puntos que está más alejado de p. Mi lista de puntos son los siguientes:
((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1))
También hice algunas abstracciones para recuperar el auto general y cdr (para facilitar la visibilidad en el código), así como el auto y cdr de la propia lista.
(define (get-x p) (car p)
(define (get-y p) (car p)
(define (get-first-point pt-list)
(get-x pt-list))
(define (get-rest-points pt-list)
(get-y pt-list))
También he escrito una fórmula de distancia generalizada que puedo usar para cualquiera de los dos puntos que elijo (tenga en cuenta que abstraí el auto y cdr para que sean get-x y get-y respectivamente).
(define (distance a b)
(if (or (null? a) (null? b))
0
(sqrt (+ (expt (- (get-x a)
(get-x b)) 2)
(expt (- (get-y a)
(get-y b)) 2)))))
Ahora que tengo esto, sé que necesito comparar las distintas distancias en todo mi conjunto de puntos y elegir el valor de retorno máximo. Tengo una solución parcial, pero no una correcta paracada punto.
(define (max-distance p pt-list)
(if (null? pt-list)
0
(max (distance p (get-first-point pt-list)) ; 1
(distance p (get-first-point (get-rest-points pt-list))) ; 2
(distance p (get-first-point (get-rest-points (get-rest-points pt-list)))) ; 3
(distance p (get-first-point (get-rest-points (get-rest-points (get-rest-points pt-list))))) ; 4
(distance p (get-first-point (get-rest-points (get-rest-points (get-rest-points (get-rest-points pt-list)))))) ; 5
(distance p (get-first-point (get-rest-points (get-rest-points (get-rest-points (get-rest-points (get-rest-points pt-list))))))) ; 6
)
)
)
Probablemente puedas entender lo que estoy (horriblemente) intentando hacer, pero es por eso que necesito la ayuda.