方案:为什么我收到此错误-assertion违章:错误类型[汽车]的参数(车“())

问题描述:

我的方案的功能正在试图获得全省细节:方案:为什么我收到此错误-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 '()) 

此代码:

(cadr (cadddr sales)) 

需要sales有足够的结构,以便您不会将carcdr从非配对值中取消。这是在它的名称,这样每个a和d:

(cadr '(1)) 

作出了同样的错误,cdr作品,但car'()没有。

如果您有更大的列表或树状结构,您可以使用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)))