使用尾递归计算方案中的数字是偶数还是奇数

时间:2014-12-04 23:48:05

标签: scheme tail-recursion

我使用scheme48中的以下函数来计算数字是偶数还是奇数。

(define (odds? x)
    (if (= x 0) #f
        ((evens? (- x 1))
        )))

(define (evens? x)
    (if (= x 0) #t
        ((odds? (- x 1))
        )))

然而,在这样做时,我收到以下错误:

  

错误:尝试调用非过程          (#T)

如果有人能够解释这个错误究竟意味着什么,以及如何解决它,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

最后一次函数调用有一些错误的(),可以改进格式。请记住,在Scheme中,一对()表示“函数应用程序”(它解释了错误消息attempt to call a non-procedure),因此您必须小心放置它们。试试这个:

(define (odds? x)
    (if (= x 0)
        #f
        (evens? (- x 1))))

(define (evens? x)
    (if (= x 0)
        #t
        (odds? (- x 1))))