如何减少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))))

你可以很容易地用英语拼写出来:

  • 基本案例:
    1. from 等于或大于 to 的素数范围为空。
    2. n 等于或小于 0 的质数范围为空。
  • 递归案例:
    1. 如果from是素数,则素数范围是from,从(+ from 1)开始调用primes-range的结果加上(- n 1) ] 元素。
    2. 否则,结果是从 (+ from 1) 开始调用 primes-range(仍然有 n 个元素)。