2010-11-10 71 views
0

我發現這個代碼的壓縮和解方案:壓縮和排序問題

(define zip 
    (lambda (leftList rightList) 
    (if (null? rightList) 
     leftList 
     (if (member (car rightList) leftList) 
     (zip leftList (cdr rightList)) 
     (zip (append leftList (list (car rightList))) (cdr rightList)))))) 

=> (zip '(1 4) '(2 3)) 
    (1 4 2 3) 

但我要對結果進行分類:

=> (zip '(1 4) '(2 3)) 
    (1 2 3 4) 
+3

據我所知拉鍊產生列表中的對,這兩個列表的每對contianing元件。例如,http://zvon.org/other/haskell/Outputprelude/zip_f.html。如果我對財產進行了詳細說明,那麼您的期望結果不是zip。 – demas 2010-11-10 10:15:57

+1

'(排序(拉鍊 '(1 4)'(2 3)))' – 2010-11-10 12:43:20

+0

但存在一個錯誤;語法:定義:太多形式值(排序(...)) ;要繼續,呼叫RESTART帶有選項號碼: ; (RESTART 1)=>返回讀EVAL-打印級別1 – fahad 2010-11-10 14:15:57

回答

1

你要找的是不是叫zip的功能;它被稱爲merge。由於這是一項家庭作業問題,因此提供解決方案將是不負責任的。我只能提供這個:

給定兩個列表已經排序,最簡單的方法是將它們組合成一個新的列表進行排序?那麼,在每個列表的第一件事情(列表中的car)是其自己的列表的最小元素,所以通過比較它們,你可以知道哪一個是最小的名單。然後,使用遞歸合併剩下的內容。