逻辑运算符可以使用尾递归吗

Gra*_*ate 3 lisp recursion scheme sicp

(define (fast-prime? n times)
  (cond ((= times 0) true)
        ((fermat-test n) (fast-prime? n (- times 1)))
        (else false)))
Run Code Online (Sandbox Code Playgroud)

此代码来自SICP,第 1.2.6 章。该过程使用tail-recursion,因此在计算时不会导致线性递归,换句话说,它是迭代的。如果我使用or / and而不是cond重写过程,会导致线性递归吗?

(define (fast-prime? n times)
  (or (= times 0)
      (and (fermat-test n) (fast-prime? n (- times 1)))))
Run Code Online (Sandbox Code Playgroud)

Chr*_*ung 5

的右侧andor有尾表达式(见R5RS 3.5节),所以你可以放心地使用这些迭代的目的。