2011-12-05 34 views
2

中寫扁平方法我一直在研究下面的函數扁平化,到目前爲止它只能用於列表。我想知道如果有人能夠提供一些關於如何使它與對一起工作的見解?例如(flatten'(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)))))) 
+2

壓扁'(A一)'入'(A一)'只是似乎錯了,因爲這確實引入了額外的水平,而不是降低它。 –

回答

6

這裏有一個選項:

(define (flatten x) 
    (cond ((null? x) '()) 
     ((pair? x) (append (flatten (car x)) (flatten (cdr x)))) 
     (else (list x)))) 
0
(define (flatten l) 
    (cond 
    [(empty? l) empty] 
    [(list? l) 
    (append (flatten (first l)) 
      (flatten (rest l)))] 
    [else (list l)]))