2016-10-24 58 views
0

我刚开始学习计划,我发现cons-cdr部分有点难以理解。我正在制作一个函数,它接受一个列表,然后显示列表中的所有原子,包括在子列表中,就好像它是一个大列表。它看起来像这样: (弄平“(1(2 3)4 5(6 7)))Scheme程序将子列表处理成一个列表

(1 2 3 4 5 6 7)

这是我的代码:

(define (flatten list1) 
    (if (not (empty? list1)) 
    (if (atom? (car list1)) 
    (cons (car list1)(flatten (cdr list1))) 
    (begin 
    (flatten (car list1)) 
    (flatten (cdr list1)))) 
    '())) 

但是,当这样做时,它将删除子列表。所以(flatten'((1 2)3 4)会给(3 4),而不是(1 2 3 4)。

任何帮助?问题可能出现在“(开始”部分,但我可以' W图出来..

感谢

+0

这是一个家庭作业,还是你只是想自己理解?我的提示(如果这是家庭作业)是,你提供的整个列表正在得到处理,但你永远不会在你的“开始”部分结合这两个函数的输出。这意味着只有'(flatten(cdr list1))'实际上被返回。 –

+0

另外,你是否需要能够随意深入列表,或深度为1足够?我是指'((1 2)3((4 5)6))'过程到'(1 2 3(4 5)6)'还是'(1 2 3 4 5 6)'? –

回答

0

尝试这样的事情在你的begin

(append (flatten (car aList)) (flatten (cdr aList))) 

而且它几乎是后同样的问题,如果不相同: flatten list