2013-02-26 5 views
0

나는 los, 숫자를 취하여 목록의 numth 기호를 반환하는 함수 검색을 수행했습니다. 간단한재귀 함수

(define (search los num) 
    (cond 
    [(empty? los) empty] 
    [(zero? num) (first los)] 
    [else (lookup (rest los) (- num 1))])) 

(check-expect (lookup (list 'a 'b 'c 'd) 0) 'a) 

하지만 난 로스 (기호 목록), 심볼 (들) 및 번호 (numth)를받는 함수를 설계하는 방법을 알아내는 데 문제, 교체 numth 기호 로스를 반환하고 s와 함께. 먼저 this-

(change (list 'a 'b 'c 'd) 'hello 2) ;==> (list 'a 'b 'hello 'd) 
(change (list 'a 'b 'c 'd) 'hi 0) ;==> (list 'hi 'b 'c 'd) 
+0

당신은'search'가 아닌'lookup' 함수의 이름을 지정하려고 했습니까? –

답변

2

인 솔루션의 경우

그런 다음, (대신 사본의) 교체 search의 목록 요소를 당신이 가지고있는 같은 num -decrementing 방법을 사용 : 기본적으로

(define (change los s num) 
    (cond ((null? los) '()) 
     ((< num 0) los) 
     ((= num 0) (cons s (cdr los))) 
     (else (cons (car los) (change (cdr los) s (- num 1)))))) 

, 그 아이디어는 재귀 적으로 목록을 재 작성하는 것이지만 (n 번째 기호를 s로 대체하는) 꼬임이 있습니다. change에 대한

(define (lst los) 
    (if (null? los) 
    '() 
    (cons (car los) (lst (cdr los))))) 

우리의 매개 변수를 우리에게로 교체 할 수있는 기호를주고, 위치가 교체 :

그래서, 재귀 적으로 내가 할 수있는 목록을 "다시"합니다. 그래서 우리는 카운트 다운, 그 시점까지 목록을 재생산. 그런 다음 0으로 계산하면 목록의 현재 기호 대신 현재 기호 대신에 새 기호를 사용할 수 있습니다. 나는 단지 < 0 체크를 추가했다.

2

같은 같은

, 목록을 복사하는 방법에 대해 생각합니다. 여기에는 num 매개 변수가 포함되지 않습니다. num 여기 0