2011-12-05 3 views
2

다음과 같이 flatten 메서드를 작성하여 지금까지 그냥 목록에만 적용했습니다. 누군가가 쌍으로 작업하는 방법에 대한 통찰력을 누군가에게 줄 수 있는지 궁금합니다. 예를 들어 (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)])) 
관련 문제