2014-01-22 33 views
0

我有一個很難得到一個簡單的嵌套if語句來工作。我有兩個函數divisible2?和divisible3?我想查看某個號碼 - n是整除均爲2和3。這是我到目前爲止有:嵌套如果/電導率方案

(define (divisible2? x) 
    (zero? (remainder 2 x))) ; 

(define (divisible3? x) 
    (zero? (remainder 3 x))) ; 

(define (div23 n) 
    (if (divisible2? n) 
    (if (divisible3? n)) #t (#f)) 
) 

感謝

+1

的論據'remainder'順序是相反的,因爲我發現你在[這](http://stackoverflow.com/a/21272705/201359)的答案,它應該是'(餘數×2)'和'(餘數×3)' –

回答

3

有幾個問題。其一是,括號是圍繞inner- if使得其具有在表單中沒有真EXPR或假EXPR錯誤。後面的假括號也是有問題的。另外,每個if都應該提供true-expr和false-expr(儘管這在方言IIRC中有所不同)。

對稱結構,可以在一個校正膨脹形式看到。

(if (divisible2? n)  ; outer if-expr 
    (if (divisible3? n) ; outer then-expr (and inner if-expr) 
     #t    ; inner then-expr 
     #f)    ; inner else-expr 
    #f)     ; outer else-expr 

或者,簡單地使用and

(and (divisible2? n) (divisible3? n)) 

而且您可以使divisible?函數採用「可整除」值。