所以这段代码叫做ret-odds
ex: (define (ret-odds lst)
(if (null? lst) null
(if (null? (cdr lst)) null
(cons (car lst) (ret-odds (cdr (cdr lst)))))))
我知道问题在于最后一行,它跳过了列表的第二个元素,只给出了第三个......
ex:(ret-odds (list 'a 'g 'e ))
该程序反过来跳过g和e并给我null,所以我最终得到了一个所以我想知道如何解决这个问题?
答案 0 :(得分:2)
您的代码总是跳过列表中的最后一个元素:
(list 'a 'd 'e)
调用时,lst为非null且(cdr lst)为非null,因此需要使用car('a
)并使用cddr进行递归调用(这是(list 'e)
)(list 'e)
的第二次调用中,lst为非null,但(cdr lst)为 null。所以它返回null,完全跳过'e
。这样的事情应该有效:
ex: (define (ret-odds lst)
(if (null? lst) null
(cons (car lst)
(if (null? (cdr lst)) null (ret-odds (cdr (cdr lst)))))))
答案 1 :(得分:0)
将您的第二个null
的{{1}}更改为if
。
lst