Балансируйте ваши скобки.#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 является простым.