Scheme 如何消除cons的副作用?
我可以使用以下代码获取列表中的奇数元素:Scheme 如何消除cons的副作用?,scheme,period,cons,Scheme,Period,Cons,我可以使用以下代码获取列表中的奇数元素: (define (odds lis) (cond ((null? lis) '()) ((not (list? lis)) (quote (Usage: odds(list)))) ((null? (car lis)) '()) ((= (length lis) 1) (car lis)) (else (cons (car lis) (odds (cddr lis)))))) 但当输入奇数长度的列表时 例如:(赔
(define (odds lis)
(cond
((null? lis) '())
((not (list? lis)) (quote (Usage: odds(list))))
((null? (car lis)) '())
((= (length lis) 1) (car lis))
(else (cons (car lis) (odds (cddr lis))))))
但当输入奇数长度的列表时
例如:(赔率’(a b c d e))
它会回来的
(a、c、e)
我怎样才能摆脱这个令人讨厌的时期呢?试试这个,这只是一句话的变化:
(define (odds lis)
(cond
((null? lis) '())
((not (list? lis)) (quote (Usage: odds(list))))
((null? (car lis)) '())
((= (length lis) 1) lis) ; change here
(else (cons (car lis) (odds (cddr lis))))))
在突出显示的行中,您返回的是单个元素而不是正确的列表(以null结尾的列表),这就是导致问题的原因。您的代码存在一些问题:
- ((null?(car lis))“())不是必需的
- (=(长度列表)1)(车辆列表))
(define (odds lis)
(cond
((null? lis) '())
((not (list? lis)) (quote (Usage: odds(list))))
(else (cons (car lis) (odds (cddr lis))))))
更简单的方法是:直接使用
lis
而不是(列表(汽车列表))
。在这一点上,它已经是一个单身列表了。