2012-11-11 82 views
1

我的目标是从这个名单递归的方案

(A B C D E G)

找到一个新的列表

(B D G)

但我的代码是行不通的。

(define (fun lst) 
    (cond 
    ((null? lst) '()) 
     ((null? (cdr lst) '()) 
     (else (cons (cadr lst) (fun lst)))) 

我得到(B C D E G)。我哪里错了?

+3

[A scheme procedure返回所有其他元素的列表]的可能重复(http://stackoverflow.com/questions/13318388/a-scheme-procedure-that-returns-a-list-of-every-其他元素) –

+0

另一个?看起来这个特定编程课程的一些学生已经开始在堆栈溢出中抛弃他们的作业。这个问题已经被回答了,[这里](http://stackoverflow.com/a/13319129/201359)。 –

+0

看看那个'else'分支,你认为你的递归是在那里吗? – jozefg

回答

2

你的功能没有做任何事情,你真的没有指定你想测试的东西。如果你真的只想从这个特定的列表中获得B D G,那么你所需要做的就是对每个角色进行每个测试,(相当于?(汽车1)'B)等等。

如果相反,该函数假设只是在列表中打印每个其他字符,那么您需要构建一种方法来实现。例如你现在递归的基本情况是正确的,空列表应该返回一个空列表。否则,如果它不是空的,则返回列表的cdr,然后使用它。

如果你仍然不能找出答案,只需开始在纸上写下来,看看不同的测试会做什么。你需要想出找到其他角色的方法。