在Scheme中打印具有奇数索引的列表的元素

时间:2011-03-20 01:21:22

标签: scheme

所以这段代码叫做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,所以我最终得到了一个所以我想知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您的代码总是跳过列表中的最后一个元素:

  1. 在第一次使用(list 'a 'd 'e)调用时,lst为非null且(cdr lst)为非null,因此需要使用car('a)并使用cddr进行递归调用(这是(list 'e)
  2. 在使用(list 'e)的第二次调用中,lst为非null,但(cdr lst) null。所以它返回null,完全跳过'e
  3. 这样的事情应该有效:

     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