0

リストを分析し、リストが奇数の場合は中央のインデックスを返し、リストが偶数の場合は中央の 2 つの値の平均を返すスキームのプロシージャを設定しました。これが私が持っているものです(これらのものはそれ自体で完全に正常に動作します):

(define (median-index-odd lst)
    (define (median-index-iter1 lst times_carred)
        (if (null? lst)
           '()
            (if (= times_carred (/ (+ (length lst) 1) 2)) 
                (list (car lst))            
                (median-index-iter1 (cdr lst) (+ 1 times_carred)))))
                (median-index-iter1 lst 0))

(define (median-index-even lst)
    (define (median-index-iter2 lst times_carred)
        (if (null? lst)
           '()
            (if (= times_carred (/ (length lst) 2)) 
                (list (/ (+ (car lst) (cadr lst)) 2))          
                (median-index-iter2 (cdr lst) (+ 1 times_carred)))))
                (median-index-iter2 lst 0))

これらのヘルパーによる煩雑さを除いた実際の手順は次のとおりです。

(define (median lst)
    (if (null? lst) 
       '()
        (if (even? lst) 
            (median-index-even lst)
            (median-index-odd lst))))

ただし、テスト ケースを実行しようとすると、エラーが発生します。

(display (median '(1 2 2 3 3 3 4 5))) (newline)

integer-remainder の最初の引数として渡されたオブジェクト (1 2 2 3 3 3 4 5) は、正しい型ではありません。

編集:わかりました、はい、私はその(even? (length lst))部分を完全に見落としていました. 現在、ヘルパーをデバッグしています。

4

1 に答える 1