我想把数字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
)
)其中stream-filter与SICP的函数相同。
发布于 2014-12-01 07:54:25
这里有一个想法:找到数字的质数因子,并检查是否存在除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)https://stackoverflow.com/questions/27219730
复制相似问题