如何减少Scheme中的值?
How to decrement a value in Scheme?
我有一个程序可以找到大于 from
的 n
最小素数
(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
并在执行期间仅在找到素数时递减它。
但是 n
没有改变。如何解决?
编写此函数的惯用 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
,从(+ from 1)
开始调用primes-range
的结果加上(- n 1)
] 元素。
- 否则,结果是从
(+ from 1)
开始调用 primes-range
(仍然有 n
个元素)。
我有一个程序可以找到大于 from
n
最小素数
(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
并在执行期间仅在找到素数时递减它。
但是 n
没有改变。如何解决?
编写此函数的惯用 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
,从(+ from 1)
开始调用primes-range
的结果加上(- n 1)
] 元素。 - 否则,结果是从
(+ from 1)
开始调用primes-range
(仍然有n
个元素)。
- 如果