Вот тут есть реализация теста Миллера-Рабина, и меня смущает одна строка:
(define (miller-rabin-test n)
(define (try-it a)
(define (check-it x)
(and (not (= x 0)) (= x 1))) ;;вот это что?
(check-it (miller-rabin-expmod a (- n 1) n)))
(try-it (+ 1 (random (- n 1)))))
Если я правильно понимаю, это проверка ((x != 0) AND (x = 1)). Почему не просто проверка х на равенство с единицей? Синтаксис: The <test> expressions are evaluated from left to right, and the value of the first expression that evaluates to a false value (see section 6.3.1) is returned. Any remaining expressions are not evaluated. [...] То есть сначала происходит сравнение с нулем, и если х = 0, сразу возвращается #f? Это не то же самое, что и просто
(define (check-it x) (= x 1))
?