2014-12-04 3 views
2

나는 등트윈 국무 스트림

((3 5) (5 7) (11 13) (17 19) ...) 

하고 다음과 같이 스트림이 될 것 같은 것을 트윈 소수의 스트림을 생성합니다. 나는 소수 (prime number)의 스트림을 생성하는 함수와 이들을 서로 짝 지어주는 함수를 가지고있다. 내가 혼란스러워하는 곳은 페어링 기능을 변경하여 쌍둥이 소수 만이 쌍을 이루도록하는 것입니다. 내 페어링 기능은 다음과 같습니다 동일한 주요 전달하는

((2 2) (2 3) (3 3) (2 5) (3 5) ...) 

답변

2

당신이해야 만 쌍 업 인접한 소수 : 다음

(define (stream-zip s t) 
    (cons-stream 
     (list (stream-car s) (stream-car t)) 
     (stream-zip (stream-cdr s) (stream-cdr t)))) 

당신이 모든 인접한에서 쌍둥이의 쌍을 유지 :

(define (twin primes) 
    (stream-filter ... 
    (stream-zip primes (stream-cdr primes)))) 
3

가 분명 자리에서 (stream-filter (lambda (x) (= (- (cadr x) (car x)) 2)) ...) 추가 스트림 때

(define (pairs s t) 
    (cons-stream 
     (list (stream-car s) (stream-car t)) 
     (interleave 
      (stream-map (lambda (x) (list (stream-car s) x)) 
       (stream-cdr t)) 
      (pairs (stream-cdr s) (stream-cdr t))))) 

현재 나는 다음과 같은 출력이 나타납니다.

+0

당신이 시냇물의 올바른 위치를 의미합니까 지도? – user3277752

+0

어쩌면 거기에 인접하지 않은 소수가 쌍둥이 일 가능성이 있습니까? :) –

+0

@ 윌 : 나는 그것을 알고 있었다. 그러나 저자가 제기 한 특정 질문에 대답할지, 저자가 물어 봐야 할 더 큰 질문에 대답 할지를 아는 것은 종종 어렵습니다. 이 경우 확실한 대답은 소수가 아닌 하나의 스트림 만 필요하다는 것입니다. 그러나 그 대신에 저자가 지적한 특정 문제를 해결하는 방법을 보여주었습니다. 당신의 대답은 물론 더 좋습니다. – user448810