2014-12-04 120 views
1

我在scheme48中使用以下函數來計算數字是偶數還是奇數。使用尾遞歸計算數字是偶數還是奇數

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

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

然而在這方面,我收到以下錯誤:

Error: attempt to call a non-procedure (#t)

我將不勝感激,如果有人能確切地解釋這個錯誤意味着什麼,以及如何解決它。

回答

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)))) 
+0

謝謝奧斯卡,看來我犯了一個粗心的錯誤。 – InfoSecNoob 2014-12-04 23:52:39

+0

@InfoSecNoob不用擔心,使用你的IDE或文本編輯器來解決這類問題,經過一些練習後,括號不會造成任何麻煩:) – 2014-12-04 23:54:26

相關問題