2016-09-26 26 views
-1

這是一個後續this question組合名單。如何遞歸經歷名單列表,並以不同的方式

我有列表或附加彙集成一個空表「記載」,這是每個格式(Matthew (AL 21 32))。我現在正在嘗試編寫一個函數,該函數將使用fetchRecord來查找所需的記錄,然後將記錄中的兩個數字相乘。但是,我目前的代碼只有在第一條記錄上得到名稱的情況下才起作用,但是之後它會爲任何記錄返回一個空列表。這裏是我的代碼:

(define (Mult_Num name) 
    (cond 
    [(empty? db) #f] 
    [else (* (car(cdr(car(cdr (fetchRecord name))))) 
      (car(cdr(cdr(car(cdr (fetchRecord name)))))))])) 

我該如何解決這個問題?另外,如果某個記錄有兩組數據,例如:(John (AL 25 40) (CA 40 67))那麼您將如何獲得25 * 40和40 * 67等,即使它具有兩組以上的數據?我明白這是遞歸,但我不太清楚你將如何設置它。

這是我fetchRecord功能:

(define (fetchRecord name) 
    (cond 
    [(empty? db) #f] 
    [(equal? (car (car db)) name) (car db)] 
    [else(car (car db)) name (cdr db)])) 

這也可能是相關的:

(define db '()) 

我也有這個,但如果我在這裏螺絲本身起來有兩個以上的名字:

(define(showRec name) ;displays everything following a name. 
    (cond 
    [(empty? db) #f] 
    [(equal? (car (car db)) name) (cdr (fetchRecord name))] 
    [else (cdr (car(fetchRecord name)))]) 
) 
+0

沒有遞歸如果函數(在這種情況下,'Bill_Amt')不會調用自身。 –

+0

@ScottHunter我想知道什麼是錯的,然後才能開始遞歸,因爲它會一直給出錯誤。 – Mkodamore

+0

請閱讀[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)上的幫助,因爲您的問題(如現在)不清楚。 – Renzo

回答

0

主要問題是你依靠fetchRecord這不僅不工作,但是不是有效的方案:在else條款應只有1個說法,不是3

而且你不應該感到驚訝,這將使用遞歸函數來處理列表的rest不處理的rest一個不使用遞歸的列表。

相關問題