Ermitteln der maximalen Entfernung zwischen zwei Punkten in einer Liste (Schema)

Ich versuche derzeit, eine Funktion aus einer Liste von Punkten zu schreiben, die den Abstand von einem Punkt p zu einem Punkt in meiner Punktliste zurückgibt, der am weitesten von p entfernt ist. Meine Liste der Punkte sind die folgenden:

((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1))

Ich habe auch einige Abstraktionen gemacht, um das allgemeine Auto und die CDR (für eine leichtere Sichtbarkeit im Code) sowie das Auto und die CDR der Liste selbst abzurufen.

(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))                                                                                         

Ich habe auch bereits eine verallgemeinerte Abstandsformel geschrieben, die ich für zwei beliebige Punkte verwenden kann (denken Sie daran, dass ich car und cdr als get-x bzw. get-y abstrahiert habe).

(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)))))

Jetzt, da ich das habe, weiß ich, dass ich die verschiedenen Abstände in meinem gesamten Satz von Punkten vergleichen und den maximalen Rückgabewert auswählen muss. Ich habe eine Teillösung, aber keine, die richtig istjeden Punkt.

(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
    )
)

)

Sie können wahrscheinlich den Kern dessen verstehen, was ich (fürchterlich) versuche, aber aus diesem Grund brauche ich die Hilfe.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage