Racket - 找到一个范围内最大的素数
Racket - Find the largest prime in a range
我正在编写一个函数 largest-prime,它使用两个自然数并生成从底部到顶部范围内的最大素数。
我使用了辅助函数 is-prime?检查数字是否为素数。
下面是我的代码:
(define (largest-prime bottom top)
(cond
[(and (>= top bottom)(equal? true (is-prime? top))) top]
[(and (< top bottom) (equal? true (is-prime? top))) false]
[else (largest-prime (sub1 top) bottom)]))
似乎这个功能只适用于某些情况:
> (largest-prime 12 19)
19
> (largest-prime 12 18)
17
> (largest-prime 12 16)
false
谁能告诉我哪里做错了?
您在 else 案例中切换了 bottom
和 top
,因此您可以将其修复为:
[else (largest-prime bottom (sub1 top))]
还有一点要注意,你不需要将is-prime?
的return值等同于"true"或"false"。只需使用 return 值作为条件就足够了。例如,考虑以下内容:
(define (largest-prime bottom top)
(cond
[(< top bottom) false]
[(is-prime? top) top]
[else
(largest-prime bottom (sub1 top))]))
我正在编写一个函数 largest-prime,它使用两个自然数并生成从底部到顶部范围内的最大素数。 我使用了辅助函数 is-prime?检查数字是否为素数。
下面是我的代码:
(define (largest-prime bottom top)
(cond
[(and (>= top bottom)(equal? true (is-prime? top))) top]
[(and (< top bottom) (equal? true (is-prime? top))) false]
[else (largest-prime (sub1 top) bottom)]))
似乎这个功能只适用于某些情况:
> (largest-prime 12 19)
19
> (largest-prime 12 18)
17
> (largest-prime 12 16)
false
谁能告诉我哪里做错了?
您在 else 案例中切换了 bottom
和 top
,因此您可以将其修复为:
[else (largest-prime bottom (sub1 top))]
还有一点要注意,你不需要将is-prime?
的return值等同于"true"或"false"。只需使用 return 值作为条件就足够了。例如,考虑以下内容:
(define (largest-prime bottom top)
(cond
[(< top bottom) false]
[(is-prime? top) top]
[else
(largest-prime bottom (sub1 top))]))