2011-12-27 6 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と、差(A3 - A4)、
  2. 以降数字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))