如果递归调用没有 return 方案中的值,如何 return 一个值
How to return a value if recursive calls don't return a value in scheme
我有以下代码来判断一个数是否是质数:
(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 每次都被 returned 而不是 #f,当发现 2 和 n 之间的数字可以被整除时,#f 应该被 returned。
如果找到这样的数字,我如何 return #f 并在找不到这样的数字时绕过我正在尝试 return 的 #t?
平衡括号。 #t
在cond
之外;它是 recIsPrime
中的最后一个表达式,所以它总是作为它的值返回。
只需将它放在 cond
的分支中,如下所示:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
(else
(if (> n 3)
(recIsPrime num (- n 1))
#t
))))
在你的 cond
里面有一个 if
是多余的;最好将它们融合成一个 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 是素数。
我有以下代码来判断一个数是否是质数:
(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 每次都被 returned 而不是 #f,当发现 2 和 n 之间的数字可以被整除时,#f 应该被 returned。
如果找到这样的数字,我如何 return #f 并在找不到这样的数字时绕过我正在尝试 return 的 #t?
平衡括号。 #t
在cond
之外;它是 recIsPrime
中的最后一个表达式,所以它总是作为它的值返回。
只需将它放在 cond
的分支中,如下所示:
(define (recIsPrime num n)
(cond
( (= (remainder num (- n 1))
0)
#f )
(else
(if (> n 3)
(recIsPrime num (- n 1))
#t
))))
在你的 cond
里面有一个 if
是多余的;最好将它们融合成一个 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 是素数。