我有以下代码来确定数字是否为质数:
(define (recIsPrime num n)
(display num)(display (- n 1))(newline)
(cond ((= (remainder num (- n 1)) 0) #f)
(else (if (> n 3)
(recIsPrime num (- n 1)))))
#t
)
第一个电话号码相同。我遇到的问题是,每次返回#t而不是发现2到n之间的数字可被整除时应返回的#f。
找到这样的数字后,如何返回#f;如果找不到这样的数字,如何绕过我试图返回的#t?
答案 0 :(得分:1)
平衡括号。 #t
在cond
之外;它是recIsPrime
中的最后一个表达式,因此它总是作为其值返回。
只需将其放在cond
的分支中,如下所示:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
(else
(if (> n 3)
(recIsPrime num (- n 1))
#t
))))
在if
中包含cond
是多余的;最好用三种替代方法将它们融合为一个cond
:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
((> n 3)
(recIsPrime num (- n 1)))
(else
#t )))
或使用逻辑连接词,如
(define (recIsPrime num n)
(and (not (= (remainder num (- n 1))
0))
(or (<= n 3)
(recIsPrime num (- n 1)))))
看起来您打算将其称为(recIsPrime num num)
,然后让它按降序尝试数字。别。与大数相比,小数的可能性更大。
此外, 2 是素数。