我可以使用以下代码获取列表中的奇数元素:
(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)
我怎样摆脱这个令人讨厌的时期?
答案 0 :(得分:0)
试试这个,这只是一行的变化:
(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))))))
在突出显示的行中,您返回的是单个元素而不是正确的列表(以空值终止的列表),这就是造成问题的原因。
答案 1 :(得分:-1)
您的代码存在一些问题:
这不是必需的,因为当列表有1个元素时,car不会为null,最后一个条件对应它,当列表没有元素时,第一个条件应对这种情况。
此终端条件有3个错误:
没有必要,因为最后一个条件适用于1个元素列表的情况。
它不会返回一对,而是一个原子元素。当它与一对结合时,结果将是(x。原子)
您可以抛出(错误“某事”)
因此,删除这两个条件,您的代码将是您想要的。
(define (odds lis)
(cond
((null? lis) '())
((not (list? lis)) (quote (Usage: odds(list))))
(else (cons (car lis) (odds (cddr lis))))))