Hi ,

When I read HTDP-Generative Recursion, I test quick-sort in Fig 68 and all is right. But when I try to replace "<" with "<=" in function "smaller-items" and add new cond "[(empty? (rest alon)) alon]" (do as the book Section 26 said), the new quick-sort doesn't work and
run in a dead loop.

My question is how to revise it?

Best regards

mht

;; The first three lines of this file were inserted by DrRacket. They record 
metadata
;; about the language level of this file in a form that our tools can easily 
process.
#reader(lib "htdp-intermediate-reader.ss" "lang")((modname quicksort) 
(read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp"))) 
(htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" 
"teachpack" "htdp")))))
;; quick-sort : (listof number)  ->  (listof number)
;; to create a list of numbers with the same numbers as
;; alon sorted in ascending order
;; assume that the numbers are all distinct 
(define (quick-sort alon)
  (cond
    [(empty? alon) empty]
    [(empty? (rest alon)) alon]
    [else (append 
            (quick-sort (smaller-items alon (first alon))) 
            (list (first alon)) 
            (quick-sort (larger-items alon (first alon))))]))

;; larger-items : (listof number) number  ->  (listof number)
;; to create a list with all those numbers on alon  
;; that are larger than threshold
(define (larger-items alon threshold)
  (cond
    [(empty? alon) empty]
    [else (if (> (first alon) threshold) 
              (cons (first alon) (larger-items (rest alon) threshold))
              (larger-items (rest alon) threshold))]))

;; smaller-items : (listof number) number  ->  (listof number)
;; to create a list with all those numbers on alon  
;; that are smaller than threshold
(define (smaller-items alon threshold)
  (cond
    [(empty? alon) empty]
    [else (if (<= (first alon) threshold) 
              (cons (first alon) (smaller-items (rest alon) threshold))
              (smaller-items (rest alon) threshold))]))

;; test
(quick-sort '(1 3 4 5 2 ))
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to