簡體   English   中英

Scheme:合並和排序功能

[英]Scheme: merge and sort functions

我正在嘗試編寫一個可以合並然后對列表進行排序的函數,但是現在我有兩個不同的函數: 合並它的一個和合並它的一個。 所以我正在嘗試編寫另一個函數,它調用任一函數,因此它可以在該函數中立即合並和排序列表。

這就是我所擁有的:

;; 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)))))))

您可以像這樣定義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)

為什么不使用已經為您寫的書 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM