【问题标题】:Scheme Program processing sub lists into one listScheme Program 将子列表处理成一个列表
【发布时间】:2017-03-06 03:51:41
【问题描述】:

刚开始学习scheme,觉得cons-cdr部分有点难懂。我正在制作一个函数,它接受一个列表,然后显示该列表中的所有原子,包括子列表中的所有原子,就好像它是一个大列表一样。它看起来像这样: (展平'(1 (2 3) 4 5 (6 7)))

(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)。

有什么帮助吗?问题可能出在“(开始”)部分,但我无法弄清楚..

谢谢!

【问题讨论】:

  • 这是一个家庭作业,还是你只是想自己理解?我的提示(如果这是家庭作业)是您提供的整个列表正在处理中,但您永远不会在 begin 部分中组合这两个函数的输出。这意味着实际上只有(flatten (cdr list1)) 被返回。
  • 另外,您是否需要能够任意深入列表,或者深度为 1 就足够了?我的意思是应该((1 2) 3 ((4 5) 6)) 处理到(1 2 3 (4 5) 6)(1 2 3 4 5 6)

标签: list scheme flatten cons cdr


【解决方案1】:

在你的 begin 块中尝试这样的事情

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

此外,如果不一样,它几乎是相同的问题: flatten list

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多