Error handling Scheme:为什么我会得到这个错误-断言冲突:参数的类型错误[car](car';())
我在scheme中的功能是尝试获取省的详细信息: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)
(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)))