Scheme-错误类型在代码中应用#f错误来检查素数

时间:2015-02-09 16:16:35

标签: scheme lisp

我正在编写一个程序来检查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))) 
        )))

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

但请注意,如果x1,它将永远循环,您应该单独处理该边缘情况。