Twin Prime Stream

时间:2014-12-04 02:26:45

标签: stream scheme primes

我想生成一个双素数流,使得流如下

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

等等。我有一个生成素数流的函数,以及一个将它们组合在一起的函数。我很困惑的是如何改变我的配对功能,以便只有双素数配对在一起。我的配对功能是:

(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)))))

目前,当传入相同的素数流

时,我会收到以下输出
((2 2) (2 3) (3 3) (2 5) (3 5) ...)

2 个答案:

答案 0 :(得分:3)

在明显的位置添加(stream-filter (lambda (x) (= (- (cadr x) (car x)) 2)) ...)

答案 1 :(得分: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))))