首页
学习
活动
专区
圈层
工具
发布

双素流
EN

Stack Overflow用户
提问于 2014-12-04 02:26:45
回答 2查看 496关注 0票数 2

我希望生成一个孪生素数流,使该流如下所示

代码语言:javascript
复制
((3 5) (5 7) (11 13) (17 19) ...) 

诸若此类。我有一个函数,它生成一个质数流,一个函数将它们配对在一起。我困惑的地方是如何改变我的配对函数,以便只有孪生素数配对在一起。我的配对功能是:

代码语言:javascript
复制
(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)))))

当前,当传入相同的质数流时,我会收到以下输出

代码语言:javascript
复制
((2 2) (2 3) (3 3) (2 5) (3 5) ...)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-04 10:27:59

你只应该对相邻的素数:

代码语言:javascript
复制
(define (stream-zip s t)
    (cons-stream
        (list (stream-car s) (stream-car t))
        (stream-zip (stream-cdr s) (stream-cdr t))))

然后,你只把一对双胞胎排除在所有相邻的双胞胎之外:

代码语言:javascript
复制
(define (twin primes)
  (stream-filter ...
    (stream-zip primes (stream-cdr primes))))
票数 2
EN

Stack Overflow用户

发布于 2014-12-04 02:37:13

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27285245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档