我有一个程序可以找到大于n
的{{1}}最小素数
from
我向过程(define (primes_range from to n)
(for ([i (in-range from to)])
(if (> n 0)
(cond ((prime? i) (display i)
(- n 1)))
false)))
添加一个参数n
,并且只有在找到一个素数时才会在执行期间减去它。
但是primes_range
没有改变。如何解决?
答案 0 :(得分:3)
编写此函数的惯用Scheme方法是使用递归:
(define (primes-range from to n)
(cond ((>= from to) '())
((<= n 0) '())
((prime? from) (cons from (primes-range (+ from 1) to (- n 1))))
(else (primes-range (+ from 1) to n))))
你可以用英语轻松拼写出来:
from
等于或大于to
的主要范围为空。n
为0或更小的素数范围为空。from
是素数,则素数范围为from
,从primes-range
和(+ from 1)
元素开始调用(- n 1)
的结果前置primes-range
开始调用(+ from 1)
(仍然使用n
个元素。)