gpt4 book ai didi

list - 如果嵌套列表有 1 个元素,如何删除 Scheme 中嵌套列表中的括号?

转载 作者:行者123 更新时间:2023-12-03 01:39:22 27 4
gpt4 key购买 nike

假设我有列表:(a b ((c)) (d + e) ((e + f)) (g) () h)

如何获取以下列表(最好使用函数):(a b c (d + e) (e + f) g h)

换句话说:

  • 如果嵌套列表只有一个元素,则它会被简化为该元素。也就是说,在上面的示例中,((c)) 被简化为 c。 ((e + f)) 也变为 (e + f)

  • 如果嵌套列表有多个元素,则它保持不变。也就是说,(d + e) 在上面的示例中仍然是 (d + e)

  • 如果嵌套列表为空,则将其简单地删除。

最后我不确定术语“展平”是否适用于这种情况。我希望我的问题很清楚。如果没有,请告诉我。

提前致谢!

最佳答案

尝试使用以下代码:

(define (atom? x)
(and (not (pair? x)) (not (null? x))))

(define (strip lst)
(if (or (null? lst) (atom? lst) (not (null? (cdr lst))))
lst
(strip (car lst))))

(define (flatten lst)
(cond ((or (null? lst) (atom? lst))
lst)
((null? (strip (car lst)))
(flatten (cdr lst)))
(else
(cons (flatten (strip (car lst))) (flatten (cdr lst))))))

当使用您的示例进行测试时,它给出了预期的答案:

> (flatten '(a b ((c)) (d + e) ((e + f)) (g) () h))
> (a b c (d + e) (e + f) g h)

关于list - 如果嵌套列表有 1 个元素,如何删除 Scheme 中嵌套列表中的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7776678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com