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 案例中切换了 bottomtop,因此您可以将其修复为:

[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))]))