주어진 심볼 식을 주어진 무한 스트림으로 바꾸려고합니다. 예를 들어 2의 곱셈의 무한한 흐름을 고려 :심볼 식을 무한 스트림으로 바꾸기
(define doubles
(cons-stream 1 (s-map (lambda (x) (* x 2)) doubles)))
및 스트림을 정의 내 기능이 올바른지 가정합니다. IE의 내 재귀 호출은 오직 무한 스트림의 '시작'내 표현을 대체, 여기
(replace '((a . b) . (c . d)) doubles)
--> ((1 . 1) 1 . 1)
주의 사항 :
지금 나는 다음을 얻을 상징적 표현을 대체하는 내 메서드를 호출 할 때 메서드는 스트림의 '나머지'부분을 사용할시기를 추적 할 수 없습니다.
올바른 출력 같아야
-> ((1/2) 4-8..)
나의 현재 코드는 다음과 같다;
(define (replace s str) (cond ((null? s) '())
((atom? s) (head str))
(else (cons (replace (car s) str)
(replace (cdr s) str)))))
제 질문은; 내 방법 recursivley 전화하는 동안 어떻게 스트림 건너 갈 수 있을까요? 사전에 감사합니다.
편집 :
나머지 스트림 계산하는 다른 방법을 사용하려고 시도한 :
(define (replace s str)
(cond ((null? s) '())
((atom? s) (head str))
(else (cons (replace (car s) (get-stream s str))
(replace (cdr s) (get-stream s str))))))
(define (get-stream s str)
(cond ((null? s) '())
((atom? s) (tail str))
(else (get-stream (cdr s) str))))
이의 새로운 출력 반환 : 당신은 str에 돌연변이 필요
---> ((4 . 4) 4 . 4)
감사합니다, 당신은 안녕하세요,이 방법은 잘 작동 –