我在计划中的职能是试图获得省份细节:
(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 :(得分:0)
此代码:
(cadr (cadddr sales))
要求sales
具有足够的结构,以便您不会从非对值中取出car
或cdr
。这适用于其名称中的每个a和d:
(cadr '(1))
出现同样的错误,cdr
有效,但car
上的'()
却没有。
答案 1 :(得分: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)))