嵌套If / Cond方案

时间:2014-01-22 04:09:37

标签: scheme conditional predicate nested-if

我很难找到一个简单的嵌套if语句。我有两个功能divisible2?和divisible3?我想知道一个数字是否可以被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 个答案:

答案 0 :(得分: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?函数接受“可被整除”值。