私はなぜlist-refが正しいパラメータを取得できないのですか?
#lang racket
(define (quick-sort xs)
(let* ([p (list-ref xs 0)]
[tail (list-tail xs 1)]
[less (filter (lambda (x) (< x p)) tail)]
[greater (filter (lambda (x) (>= x p)) tail)])
(append (quick-sort less) (list p) (quick-sort greater))))
(ラケット)方式でクイックソートを書いたしかし、私はそれをしようとしたとき、私はこのエラーを得た:
> (quick-sort (list 99 2 9922))
list-ref: index 0 too large for list: '()
私はかなり理解していないので、私はスキームに新たなんです
ありがとう:なぜリスト-refが正しい入力'(99 2 9922)
編集を取得することはできません。私はそれを仕事にしました。
#lang racket
(define (quick-sort xs)
(let* ([p (first xs)]
[tail (rest xs)]
[less (filter (lambda (x) (< x p)) tail)]
[greater (filter (lambda (x) (>= x p)) tail)])
(if (equal? (length xs) 1)
xs
(append (quick-sort less) (list p) (quick-sort greater)))))
新しいコードでは、 '(equal?(length xs)1)'はすべての入力に対してテストされ、常にxsの全長(線形演算)を計算します。長さが何であるか気にしないので、1以外の場合、 '(and(not?null?xs))(null?(cdr xs)))'のような定数時間テストを使うことができます。 (リストは空ではなく、最初の要素*の後の部分が*空であると主張しますが後者は明らかに長さ1を意味しますが、リストが空でなければエラーが発生しますしたがって、最初の条件。) – Carlo