Error handling Scheme:为什么我会得到这个错误-断言冲突:参数的类型错误[car](car';())

Error handling Scheme:为什么我会得到这个错误-断言冲突:参数的类型错误[car](car';()),error-handling,functional-programming,scheme,Error Handling,Functional Programming,Scheme,我在scheme中的功能是尝试获取省的详细信息: (define (getProvincesHelper sales provincesList) (if (null? sales) provincesList ( getProvincesHelper (cdr sales) (append (list (cadr(cadddr sales))) provincesList)) ) ) (define (getProvinces sales)

我在scheme中的功能是尝试获取省的详细信息:

(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
具有足够的结构,以便您不会将
car
cdr
从非配对值中去掉。这适用于每个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)))