2009-10-03 7 views
3

저는 Stanford의 programming paradigm lecture series을 듣고 있었지만 다음 코드 (20 번 강의)로 혼란 스럽습니다. 누군가가 이것을 한 줄씩 설명해 줄 수 있습니까?누군가 다음 Scheme 코드를 설명 할 수 있습니까?

감사합니다.

(define (flatten sequence) 
    (cond ((null? sequence) '()) 
     ((list? (car sequence)) (append (flatten (car sequence)) 
             (flatten (cdr sequence)))) 
     (else (cons (car sequence) 
        (flatten (cdr sequence)))))) 
+0

의 는 – Martin

답변

7
# define a procedure 'flatten' that takes a list 'sequence' 
(define (flatten sequence) 
    # if the 'sequence' is empty, return an empty list 
    (cond ((null? sequence) (list)) 
     # if the first element of 'sequence' is itself a list, return a new list 
     # made by appending the flattened first element of 'sequence' with the 
     # flattened rest of the 'sequence' 
     ((list? (car sequence)) 
     (append (flatten (car sequence)) 
       (flatten (cdr sequence)))) 
     # if the first element of 'sequence' is not a list, return a new list 
     # made by cons-ing that element with the flattened rest of the 'sequence' 
     (else 
     (cons (car sequence) 
       (flatten (cdr sequence)))))) 
I (일부 개행을 삽입하고 코드를 들여 그 구조를 도시하는)을 매우 인쇄와 같은 (동일한 값을 가지고있는) 다만 잘못 강조되는 코드 방지 할 (list)으로 '() 대체

.

+1 무엇이 합당합니까? 다른 키워드도 설명해 주시면 고맙겠습니다. 감사합니다

제가 동의하는 경우 나는 단지 cons 절차를 언급하고 있습니다. <expression> 어떤 계획 발현 또는 값과 <list>가리스트로 평가 어떤 계획 표현입니다 어디 (cons <expression> <list>)을 볼 때, cons 그것의 전면에 압정으로 고정 <expression>의 값으로 <list>를 반환합니다. 예를 들어, (cons 1 (list 2 3 4))(list 1 2 3 4) 목록을 반환합니다. 실제로, Scheme의 (list 1 2 3 4)은 단지 (cons 1 (cons 2 (cons 3 (cons 4 '()))))을 작성하는 짧은 방법 일뿐입니다.

문제가있는 다른 두 단어는 carcdr입니다. 당신은 <list> 나머지 요소 또는 꼬리 의미로 요소 또는 머리 <list>(cdr <list>)을 의미하는 것으로 (car <list>) 생각할 수 있습니다. 예를 들어 (car (list 1 2 3 4))1 값을 반환하고 (cdr (list 1 2 3 4))(list 2 3 4) 목록을 반환합니다.

다른 키워드에 대한 도움이 필요한 경우 알려주십시오. 리스트의 헤드 (자동차)은 시퀀스 평탄화의 결과를 반환 할 경우

+1

아, 그냥 기억 체계의 의견은 세미콜론으로 시작합니다. 하지만 octothorpes를 세미콜론으로 바꿀 때 강조 표시가 엉망이되어 버립니다. –

+0

+1 consing이란 무엇입니까? 다른 키워드도 설명해 주시면 고맙겠습니다.덕분에 – vehomzzz

+0

@ 제레미 루틴에게 감사합니다 - 당신은 당신의 방식에 대해 알고있는 것 같습니다! – vehomzzz

1
  1. 빈 시퀀스에 대한 시퀀스

  2. 을 평탄화 함수를 정의 빈

  3. 를 반환 그것은 꼬리의 편평함 (cdr) 에 덧붙여졌다

  4. 그 밖의 것은 머리를 평평하게하는 것에 덧붙인다. 꼬리 나의 대학 시절부터 내가 계획을 그리워

관련 문제