Filter 创建只有某些素数因子的数字流
我想取无限的数字流1,2,3,4。。。并对其进行过滤,使其仅包含素数因子为7和13的数字。(即7、13、49、91、169、343等) 我已经启动了下面的函数,但是我对如何正确地过滤出只有这些特定素数因子的数字感到困惑Filter 创建只有某些素数因子的数字流,filter,stream,scheme,Filter,Stream,Scheme,我想取无限的数字流1,2,3,4。。。并对其进行过滤,使其仅包含素数因子为7和13的数字。(即7、13、49、91、169、343等) 我已经启动了下面的函数,但是我对如何正确地过滤出只有这些特定素数因子的数字感到困惑 (define function (stream-filter (lambda (x) (or (= (/ x 7) 1) (= (/ x 13) 1)
(define function
(stream-filter
(lambda (x)
(or
(= (/ x 7) 1)
(= (/ x 13) 1)
)
)
numbers
)
)
其中,流过滤器与SICP的功能相同 这里有一个想法:找到数字的基本因子,检查是否有除
7
和13
以外的因子:
(define (factor number)
(let loop ((divisor 2) (number number))
(cond ((> (* divisor divisor) number) (list number))
((zero? (modulo number divisor))
(cons divisor (loop divisor (/ number divisor))))
(else (loop (add1 divisor) number)))))
(stream-filter
(lambda (x)
(null?
(filter (lambda (e) (not (or (= e 7) (= e 13))))
(factor x))))
numbers)
我是不是遗漏了什么,或者你能对数字进行模7或模13运算吗?