Почему list-ref не может получить правильный параметр?

Я написал схему быстрой сортировки (racket)

#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: '()

Я новичок в схеме, поэтому я не совсем понимаю, почему list-ref не может получить правильный ввод '(99 2 9922)

Edit :

Спасибо. Я заставил это работать.

#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)))))
0
задан ablmf 29 July 2011 в 04:24
поделиться