2011-02-04 80 views
0

我想寫一個函數合併,然後排序列表,但現在我有兩個不同的功能;合併它和分類它的一個。所以我試圖編寫另一個函數,它調用了函數,因此它可以在該函數中一次合併和排序列表。計劃:合併和排序功能

這是我有:

;; this merges the list 
(define (merge l1 l2) 
    (cond ((null? l1) l2) 
     ((null? l2) l1) 
     ((< (car l1) (car l2)) (cons (car l1) (merge (cdr l1) l2))) 
     (else (cons (car l2) (merge l1 (cdr l2)))))) 

;; this sorts the list 
(define sort 
    (lambda (lst) 
    (if (null? lst) 
     '() 
     (insert (car lst) 
       (sort (cdr lst)))))) 

(define insert 
    (lambda (elt sorted-lst) 
    (if (null? sorted-lst) 
     (list elt) 
     (if (<= elt (car sorted-lst)) 
      (cons elt sorted-lst) 
      (cons (car sorted-lst) 
        (insert elt (cdr sorted-lst))))))) 
+0

你只是w一個函數`(define(merge-sort l1 l2)(sort(merge l1 l2)))`,這個函數被稱爲'(merge-sort(list 8 3 7 4 9 2)(list 5 1 0 6 4) )``在'(0 1 2 3 4 4 5 6 7 8 9)'結果`? – 2011-02-04 04:20:15

回答

2

定義您merge-sort這樣的:

(define (merge-sort l1 l2) (sort (merge l1 l2))) 

例子:

> (merge-sort (list 8 3 7 4 9 2) (list 5 1 0 6 4)) 
(0 1 2 3 4 4 5 6 7 8 9)