2016-10-24 2 views
0

방금 ​​학습 계획을 시작했으며, cons-cdr 부분을 이해하기가 어려웠습니다. 나는리스트를 취하는 함수를 만들고 있는데, 서브리스트에 하나의 큰리스트 인 것처럼 그리스트에있는 모든 원소를 표시한다. 그 결과는 다음과 같습니다 (평평 '(1 (2 3) (4) (5) (6 7)))Scheme Program 목록을 하나의 목록으로 처리합니다.

(1 2 3 4 5 6 7)

여기

가 내 코드 :

(define (flatten list1) 
    (if (not (empty? list1)) 
    (if (atom? (car list1)) 
    (cons (car list1)(flatten (cdr list1))) 
    (begin 
    (flatten (car list1)) 
    (flatten (cdr list1)))) 
    '())) 

그러나이 작업을 수행하면 하위 목록이 제거됩니다. 그래서 (flatten '((1 2) 3 4)는 (1 2 3 4) 대신에 (3 4)를 줄 것입니다 ..

어떤 도움이 필요합니까? 문제는 "시작"부분에있을 수 있지만, t 그림 그것을 밖으로 ..

감사

+0

숙제가 있습니까? 아니면 혼자서 이해하려고 노력하고 있습니까? 나의 숙고 (숙제 인 경우)는 귀하가 제공 한 전체 목록이 처리되고 있지만 두 함수의 출력을 절대로'begin' 섹션에 결합하지 않는다는 것입니다. 이것은'(flatten (cdr list1))'만 실제로 반환된다는 것을 의미합니다. –

+0

또한 임의로 목록에 올 수 있어야합니까? 아니면 1의 깊이가 충분합니까? 나는 ((1 2) 3 ((4 5) 6))'과정을'(1 2 3 (4 5) 6)'또는'(1 2 3 4 5 6)'로 처리해야한다는 것을 의미합니까? –

답변

0

이 당신의 begin 블록 또한

(append (flatten (car aList)) (flatten (cdr aList))) 

거의의 포스트 같은 질문하지 않을 경우 같은이 같은 것을보십시오! flatten list

관련 문제