Scheme-Wrong type to apply #f error in code for checking a prime number

Scheme-Wrong type to apply #f error in code for checking a prime number

我正在编写一个程序来检查 Scheme 中的数字是否为质数。但是,我编写了以下代码。我在 Whosebug 上查看了另一个问题,其中 OP 遇到了同样的错误。我检查了我是否犯了同样的错误。我不是。我还检查了所有括号。他们是完美的。错误在哪里?

这是我的代码。

(define 
    (prime? x n)
        (cond ( 
            ( = 0 (remainder x n) (display "not prime") ) 
            ( = x (- n 1) (display "prime") ) 
            ( else (prime? x (+ n 1))) 
        )))

再次,括号有问题。另外逻辑似乎不对,你应该先测试第二种情况:

(define (prime? x n)
  (cond ((= x n) (display "prime")) 
        ((= 0 (remainder x n)) (display "not prime")) 
        (else (prime? x (+ n 1)))))

像这样使用它,从 n 开始,值为 2

(prime? 17 2)
=> #t

不过要小心,如果 x1 它将永远循环,您应该单独处理该边缘情况。