2017-10-18 62 views
-1

我的方案的功能正在試圖獲得全省細節:方案:爲什麼我收到此錯誤-assertion違章:錯誤類型[汽車]的參數(車「())

(define (getProvincesHelper sales provincesList) 

    (if (null? sales) 

     provincesList 

     (getProvincesHelper (cdr sales) (append (list (cadr(cadddr sales))) provincesList)) 

) 
) 

(define (getProvinces sales) 

(getProvincesHelper sales '()) 

) 

名單的數據是這種格式

;(orderNum (orderDate shipDate) (grossSale discount profit unitPrice) (deliveryMethod province) product) 

(3 ("10/13/2010" "10/20/2010") (261.54 0.04 -213.25 38.94) ("Regular Air" "Nunavut") "Eldon Base for stackable storage shelf, platinum") 

我得到的錯誤:

assertion-violation: argument of wrong type [car] 
        (car '()) 

回答

0

此代碼:

(cadr (cadddr sales)) 

需要sales有足夠的結構,以便您不會將carcdr從非配對值中取消。這是在它的名稱,這樣每個a和d:

(cadr '(1)) 

作出了同樣的錯誤,cdr作品,但car'()沒有。

0

如果您有更大的列表或樹狀結構,您可以使用list-ref。它需要一個列表並返回從0開始的第n個元素。

如果要從示例列表中獲取「Nunavut」,則必須採用第4個元素,該元素也是一個列表。而這個元素的cdr的車就是結果。

實施例:

;;  (orderNum (orderDate shipDate)  (grossSale discount profit unitPrice) (deliveryMethod province) product) 
(let ((l '(3  ("10/13/2010" "10/20/2010") (261.54 0.04  -213.25 38.94)  ("Regular Air" "Nunavut") "Eldon Base for stackable storage shelf, platinum"))) 
    (cadr (list-ref l 3))) 
相關問題