2014-01-22 2 views
0

Мне тяжело получить простой вложенный оператор if для работы. У меня две функции divisible2? и делимый3? и я хочу, чтобы увидеть, если определенное число - п делится на 2 и и 3. Вот что я до сих пор:Вложенная схема If/Cond

(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

Порядок аргументов для 'остатка' отменен, так как я показал вам в [this] (http://stackoverflow.com/a/21272705/201359) ответ, он должен быть' (остаток x 2) ' и '(остаток x 3)' –

ответ

3

Там есть несколько проблем. Первая заключается в том, что скобки не совпадают с внутренним значением if, так что он имеет no true-expr или false-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? функции принимают в «делится на» значение.

Смежные вопросы