合并排序输出 - 方案

时间:2014-11-06 02:50:46

标签: scheme lisp racket mergesort

我有一个合并排序函数,它接受一个谓词和一个实际值列表,然后根据谓词对它们进行排序。 e.g。

(merge-sort > '(1 7 4 6)) 
    ---> (7 6 4 1)

我的问题是关联列表:

(define *Mark*
    '( (age . 20)
       (gender . male))

(define *Judith*
    '( (age . 30)
       (gender . female))

(define *Elliot*
    '( (age . 40)
       (gender . male))

用于创建无序列表(Mark Elliot Judith),如何使用他们在合并排序中的年龄

(merge-sort > '(20 40 30)) ---> (40 30 20)

我可以输出有序列表

(Elliot Judith Mark)

1 个答案:

答案 0 :(得分:2)

(merge-sort (lambda (a b)
              (define (get-age x)
                (cdr (assq 'age x)))
              (> (get-age a) (get-age b)))
            (list *Mark* *Judith* *Elliot*))