Scheme四重排序不同的标准

时间:2011-12-27 22:37:04

标签: sorting scheme criteria

  

可能重复:
  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。
  4. 我请求你的帮助。谢谢。黛比。 我不能包含我的代码,因为在这个地方不接受它。

1 个答案:

答案 0 :(得分: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))