我一直致力于以下功能展平,到目前为止它只适用于列表。我想知道是否有人可以提供一些有关如何使用它的工作的见解?例如(flatten'(a .a))将返回(a a)。感谢。
(define (flatten list)
(cond ((null? list) null)
((list? (car list)) (append (flatten (car list)) (flatten (cdr list))))
(else
(cons (car list) (flatten (cdr list))))))
答案 0 :(得分:6)
这是一个选项:
(define (flatten x)
(cond ((null? x) '())
((pair? x) (append (flatten (car x)) (flatten (cdr x))))
(else (list x))))
答案 1 :(得分:1)
这可以做您想要的,而无需附加,使其变为o(n)。我像树上行走列表。如果列表嵌套太深,某些方案可能会引发堆栈溢出错误。狡猾的情况并非如此。
我对此代码没有版权。
(define (flatten lst)
(let loop ((lst lst) (acc '()))
(cond
((null? lst) acc)
((pair? lst) (loop (car lst) (loop (cdr lst) acc)))
(else (cons lst acc)))))
答案 2 :(得分:0)
(define (flatten l)
(cond
[(empty? l) empty]
[(list? l)
(append (flatten (first l))
(flatten (rest l)))]
[else (list l)]))