2012-02-14 4 views
3

목표 :unfold 함수는 두 개의 인수 만 사용합니다.체계에서 펼치기 기능

인자 :

  • 제 인자 I 및 ​​반환 nil을 어떤 유형 또는 이들 두 가지의 처음 두 개의 요소 (의 단점 쌍의 초기 값을 취 F이고 다음 요소 그 어떤 유형 A의 목록과 어떤 유형 I의 다음 초기 값으로 간다.
  • 두 번째 인수는 몇 가지 유형 I의 초기 값 및 반환이 내가 지금까지 가지고 있고 나는 그것이 작동하지 않는 이유는 확실하지 않다 무엇

A 형의 항목의 목록입니다 : 이 결과가 있어야하는데,

'(5 4 3 2 1) 

(define (descending i) 
    (if (= i 0) 
    (list) 
    (cons i (- i 1)))) 

(define nil (list)) 

(define (unfold f init) 
    (if (eq? (f init) '()) 
    (list) 
    (cons init (unfold f (f init))))) 

(unfold (descending 5)) 

은 평가해야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

5

먼저 (unfold descending 5)이어야합니다. 그런 다음 f은 한 쌍을 생성하고 두 구성 요소를 모두 사용하게됩니다.

(define (unfold f init) 
    (if (eq? (f init) '()) 
    (list) 
    (cons (car (f init)) (unfold f (cdr (f init)))))) 
+0

나는 봅니다! 감사! 또한 '(-100 ... 100)을 반환하는 오름차순 함수를 정의하려면 다음 코드가 -5에서 멈춘 이유를 모르겠습니다. (정의 (오름차순 i) (if (= i (- i)) (cons i (+ i 5)))) (펼치기 오름차순 (- 100)) –

+0

상태가'(= i (- i))')'이므로 0에서 멈추고 consed는 마지막으로 '-5'입니다. –

+0

나는 그저해야만한다고 생각한다. (= i (105)). 방금 함수를 정의하여 초기 값의 음수를 포함하여 모든 숫자를 인쇄 할 수 있다고 생각했습니다. –