我想取数字 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)
)
)
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)