如何减少Scheme中的值?

时间:2015-12-01 10:21:25

标签: scheme

我有一个程序可以找到大于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没有改变。如何解决?

1 个答案:

答案 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))))

你可以用英语轻松拼写出来:

  • 基本情况:
    1. from等于或大于to的主要范围为空。
    2. n为0或更小的素数范围为空。
  • 递归案例:
    1. 如果from是素数,则素数范围为from,从primes-range(+ from 1)元素开始调用(- n 1)的结果前置
    2. 否则,结果是从primes-range开始调用(+ from 1)(仍然使用n个元素。)