在SCHEME中写下一对性感素数对

时间:2016-11-22 03:06:48

标签: stream scheme primes

我有一个SCHEME功能是性感的吗?如果n是一对性感素数的一部分,则取一个参数n,返回true,否则返回false,以及一个SCHEME函数,sexy-primes,它取一个整数n作为参数并返回一对素数的差值为6且较小的数字小于或等于n。

如何定义性感素数对的流?

  (define (is-sexy? n)
  (define (is-prime? x)
    (define (is-prime?-aux x k)
      (cond ((< x 1) #f)
            ((= x k) #t)
            (else
             (if (= (remainder x k) 0) #f
                 (is-prime?-aux x (+ k 1))))))
    (cond ((= x 1) #t)
          ((= x 2) #t)
          (else (is-prime?-aux x 2))))
  (if (and (is-prime? n)
           (or (is-prime? (- n 6)) (is-prime? (+ n 6)))) #t
                                                         #f))

  (define (sexy-primes n)
  (if (= n 0) '()
      (if (is-sexy? n) (cons n (sexy-primes (- n 1)))
          (sexy-primes (- n 1)))))

1 个答案:

答案 0 :(得分:0)

这有效:

(define (sexyprimes-from k)
  (if (is-sexy? k) (cons (cons k (+ k 6)) (delay (sexyprimes-from (+ k 1))))
   (sexyprimes-from (+ k 1))))
(define sexy-primes (sexyprimes-from 5))