方案:为什么我收到此错误-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
有足够的结构,以便您不会将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)))