2014-12-01 3 views
-1

목록을 입력으로 사용하고 목록 또는 원자를 반환하는 함수를 만들었습니다. 깊은 목록에이 함수를 적용하고 내부 목록부터 시작하여 함수가 외부 목록에서 실행되면 끝내기를 원합니다.깊은 목록 구성에 대한 재귀 호출

누군가 내게 어떤 방향을 제시 할 수 있습니까?

샘플 입력은 (a b (c (d e))) z가 될 것입니다. 함수는 먼저 f의 결과로 (d e)를 계산해야합니다. 함수는 (g)의 결과를 가지고 (c f)를 계산하고, h의 결과를 산출하기 위해 (a b g z)를 계산해야한다.

예시적인 기능 일 수 :

(define sum 
(lambda (l) 
    (if (not (pair? l)) 
    0 
    (+ (car l) (sum (cdr l)))))) 

가 입력 될 것 인 (1 2/5 (3 4)) 여기서

+2

곳의 문제 정확히 요약, 샘플 입력과 예상 출력을 지금까지 작성한 코드를 게시하시기 바랍니다 당신의 구현 –

+0

샘플 입력은 (ab (c (de)))가 될 것입니다. 함수는 먼저 f의 결과로 on (de)를 계산해야합니다. 함수는 (g)의 결과를 가지고 (c f)를 계산해야하고, 마찬가지로 h의 결과를 산출하기 위해 (a b g)를 계산해야한다. 숙제 때문에 코드를 붙여 넣을 수는 없습니다. – Adam

+0

@ user234234 유사한 문제를 해결하는 http://stackoverflow.com/q/5699899/23567을 살펴보십시오. 코드가 없으면 사람들은 도움을 꺼리게됩니다. – soegaard

답변

0

하여 가정 Scheme 프로 시저로 표현 된 예제 변환 :

(define (transform lst) 
    (case lst 
    (((d e)) 'f) 
    (((c f)) 'g) 
    (((a b g z)) 'h) 
    (else (error (~a "wot? " lst))))) 

는 당신을 위해 무엇을 찾고있는

(define (f lst) 
    (transform 
    (map (lambda (e) 
      (if (list? e) (f e) e)) 
     lst))) 

테스트 것 같다 :

> (f '(a b (c (d e)) z)) 
'h 
0

15 일례이다>

(define product 
    (lambda (l) 
    (cond 
     [(number? l) l] 
     [(pair? l) (* (product (car l)) (product (cdr l)))] 
     [else  1]))) 

> (product '(1 2 (3 4) 5)) 
120 
+0

그러나 도움을 많이 주셔서 감사합니다. 그러나 이미 정의 된 함수를 매핑하려고합니다. 합계 또는 다른 기능을 깊은 목록에 추가하십시오. – Adam