나는이 연습 문제를 스스로 해결할 수 있도록 몇 가지 힌트를 드리겠습니다. 가장 먼저 할 수있는 일은 가능한 한 두 가지 절차로 문제를 분리하는 것입니다.
(define (repeat n i)
(if (zero? i) ; if no more repeats are needed
<???> ; return the empty list
(cons <???> ; else cons `n` and advance the recursion
(repeat <???> ; `n` is left unchanged
<???>)))) ; but `i` is diminished by one
번째 절차 입력 lst
반복하고 모든 결과를 결합 헬퍼로서 이전을 사용하여 다수 n
주어진 첫번째는, n
의 i
반복으로리스트 생성을 담당 repeat
에 의해 생성 된 하위 목록 :
(define (repeats-a-lot lst)
(if (null? lst) ; if the list is empty
<???> ; return the empty list
(append (repeat <???> <???>) ; append n repetitions of current element
(repeats-a-lot <???>)))) ; and advance the recursion over the list
이 문제를 해결하기 위해 여러 가지 방법이 있습니다, 일부 애호가 (등, 접이식 절차를 사용하여, 꼬리 재귀를 사용)하지만 이럴 의미에서, 가장 간단한 방법입니다 그것은 단지 요구한다. 절차를 조작하는 몇 가지 기본 목록에 대한 지식. 어쨌든 예상대로 작동합니다.
(repeats-a-lot '(1 2 3))
=> '(1 2 2 3 3 3)
[무엇을 시도해 봤습니까?] (http://whathaveyoutried.com) –