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
不过要小心,如果 x
是 1
它将永远循环,您应该单独处理该边缘情况。
我正在编写一个程序来检查 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
不过要小心,如果 x
是 1
它将永远循环,您应该单独处理该边缘情况。