Схема: объединение и сортировка функций - PullRequest
0 голосов
/ 04 февраля 2011

Я пытаюсь написать функцию, которая объединяет, а затем сортирует список, но теперь у меня есть две разные функции; тот, который объединяет это и тот, который сортирует это. Поэтому я пытаюсь написать другую функцию, которая вызывает обе функции, чтобы она могла объединить и отсортировать список сразу в этой функции.

Вот что у меня есть:

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

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Вы определяете 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)
0 голосов
/ 04 февраля 2011

Почему бы не использовать один уже написанный для вас:)

...