我正在编写一个程序来检查Scheme中的数字是否为素数。但是,我写了以下代码。我在StackOverflow上查看另一个问题,其中OP得到了同样的错误。我检查了我是否犯了同样的错误。我不是。我还检查了所有的parantheses。他们是完美的。错误在哪里?
这是我的代码。
(define
(prime? x n)
(cond (
( = 0 (remainder x n) (display "not prime") )
( = x (- n 1) (display "prime") )
( else (prime? x (+ n 1)))
)))
答案 0 :(得分:2)
再一次,括号有问题。逻辑似乎也没关系,你应该先测试第二种情况:
(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
,它将永远循环,您应该单独处理该边缘情况。