1

私はSchemeが初めてで、Dr.Racketを使用してリストの中央値を見つけようとしています。

たとえば、(median 2 1 3)を返す必要が2あり、 を返す(median 1 1 5 5 2 3)必要があり2.5ます。

私は R 6 RS スキーム仕様を使用しており、使用を許可されていますget-line

これが私がこれまでに持っているものです:

#!r6rs
(import (rnrs))

(define (median-interactive lst)
  (display "Enter input:")
  (let ((input (get-line (current-input-port))))
    (list-sort < lst)))

誰でも私を助けることができますか?

4

2 に答える 2

2

事 1: 'median-interactive' は 'median' を呼び出すべきではありませんか?

事 2: 'median-interactive' とは完全に独立して 'median' を開発することを強くお勧めします。

事 3: 中央値の機能の例を挙げていただけますか? 具体的には、「中央値」と呼ぶ方法とそれが何を返すかの具体的な例は?

事 4: これは宿題だと思いますか?

于 2011-02-27T21:38:14.657 に答える
1

これは単純な実装です。中央値は値の半分が上にあり、半分が下にある点にすぎないため、リストを並べ替えて中間点を見つけることができます。要素の数が奇数か偶数かに応じて、ソートされたリストの中間点 (奇数) または 2 つの中間点の平均 (偶数) を取得できます。

(define (median lst)
  (let ((len (length lst))
        (nlst (sort lst >)))
    (if (even? len)
        (/ (+ (list-ref nlst (/ len 2))
              (list-ref nlst (- (/ len 2) 1))) 2)
        (list-ref nlst (truncate (/ len 2))))))

これが宿題である場合、そのような厄介なバージョンは「D」を取得する可能性がありますが、機能します。

> (median (list 5 2 6 2))
3 1/2
> (median (list 5 2 6 3 1))
3
> 
于 2011-02-28T17:20:19.923 に答える