我一直在使用下面的函数flatten,到目前为止,它只适用于lists。我想知道是否有人可以给我一些关于如何让它与pairs一起工作的见解?例如,(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))))))发布于 2011-12-05 23:26:49
这里有一个选择:
(define (flatten x)
(cond ((null? x) '())
((pair? x) (append (flatten (car x)) (flatten (cdr x))))
(else (list x))))发布于 2019-11-18 20:08:31
这做了你想要的,不需要追加,使它成为o(n)。我以树的形式遍历列表。如果列表嵌套得太深,一些方案可能会抛出堆栈溢出错误。在guile中,情况并非如此。
我不主张这段代码的版权。
(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)))))发布于 2011-12-28 13:06:59
(define (flatten l)
(cond
[(empty? l) empty]
[(list? l)
(append (flatten (first l))
(flatten (rest l)))]
[else (list l)]))https://stackoverflow.com/questions/8387583
复制相似问题