現在、ポイント p からポイント リスト内のポイント p から最も離れたポイントまでの距離を返すポイント リストから関数を作成しようとしています。私のポイントのリストは次のとおりです。
((2 . 4) (3 . 6) (5 . 12) (-4 . 3) (8.4 . 9) (0 . -1))
また、リスト自体の car と cdr だけでなく、一般的な car と cdr (コードでの可視性を高めるため) を取得するための抽象化も行いました。
(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))
また、選択した任意の 2 点に使用できる一般化された距離の公式も既に書きました (car と cdr をそれぞれ get-x と get-y に抽象化したことに注意してください)。
(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)))))
これで、一連のポイント全体でさまざまな距離を比較し、最大の戻り値を選択する必要があることがわかりました。私は部分的な解決策を持っていますが、すべての点で正しい解決策ではありません。
(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
)
)
)
おそらく、私が(恐ろしく)やろうとしていることの要点を理解できるでしょうが、これが私が助けを必要とする理由です.