# 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 '()))))
을 작성하는 짧은 방법 일뿐입니다.
문제가있는 다른 두 단어는 car
과 cdr
입니다. 당신은 <list>
의 나머지 요소 또는 꼬리 의미로 첫 요소 또는 머리 <list>
의 및 (cdr <list>)
을 의미하는 것으로 (car <list>)
생각할 수 있습니다. 예를 들어 (car (list 1 2 3 4))
은 1
값을 반환하고 (cdr (list 1 2 3 4))
은 (list 2 3 4)
목록을 반환합니다.
다른 키워드에 대한 도움이 필요한 경우 알려주십시오. 리스트의 헤드 (자동차)은 시퀀스 평탄화의 결과를 반환 할 경우
의 는 – Martin