2011-12-27 53 views
-1

可能重复:
scheme sort list diffent criteria方案四倍排序不同的标准

我有四元的有限列表,像

(list (list 1 3 5 5) (list 2 3 4 9) (list 3 4 4 6)(list 4 7 10 3)). 

的元素中的每一个表示为( a1 a2 a3 a4)。 我写了一个代码,它提供了上面的列表,我已经停止 ,因为我不知道如何继续。我想要写一个排序函数 ,其提供根据以下 标准创建一个“增加”的文章:

  1. 号码A2,
  2. 后的差(A3 - A4),
  3. 和后来数字a3。

我恳求您的帮助。谢谢。黛比。 我不能包含我的代码,因为它在这个地方不被接受。

回答

0

我写了一个谓词,似乎做你想做的。你可以将它插入mergesort工作。

(define <quad 
    (lambda (l1 l2) 
    (let 
     ([l1a2 (cadr l1)] 
     [l1a3 (caddr l1)] 
     [l1a3 (cadddr l1)] 
     [l2a2 (cadr l2)] 
     [l2a3 (caddr l2)] 
     [l2a3 (cadddr l2)]) 
     (cond 
     [(< l1a2 l2a2) #t] 
     [(< (- l1a3 l1a4) (- l2a3 l2a4)) #t] 
     [(< l1a3 l2a3) #t])))) 

如果您通过在谓词的说法,你的排序应很好地工作:

(merge-sort <quad '((2 3 4 5) (1 2 3 4))) => ((1 2 3 4) (2 3 4 5))