我想生成一个双素数流,使得流如下
((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) ...)
答案 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))))