Encontrando distância máxima entre dois pontos em uma lista (esquema)
Atualmente estou tentando escrever uma função de uma lista de pontos que retorna a distância de um ponto p para um ponto na minha lista de pontos que está mais distante de p. Minha lista de pontos é a seguinte:
((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1))
Eu também fiz algumas abstrações para recuperar o carro geral e cdr (para facilitar a visibilidade no código), bem como o carro e cdr da própria 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))
Eu também já escrevi uma fórmula de distância generalizada que eu posso usar para qualquer dois pontos que eu escolher (tenha em mente que eu abstraí carro e cdr para ser get-x e 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)))))
Agora que tenho isso, sei que preciso comparar as várias distâncias em todo o meu conjunto de pontos e escolher o valor máximo de retorno. Eu tenho uma solução parcial, mas não uma corretacada ponto.
(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
)
)
)
Você provavelmente pode obter a essência do que eu estou (horrivelmente) tentando fazer, mas é por isso que eu preciso da ajuda.