使用if in scheme来检查多种后果

时间:2016-01-25 11:50:28

标签: if-statement scheme

我找到了一个解决方法:

(define (sign x)
  (if (positive? x)
      1
      (if (negative? x)
          -1
          0)))

刚刚在我的大学开设了一个Scheme课程。我们得到的一个练习是定义一个名为sign的过程,它将一个数字作为参数,如果数字为正则返回1,如果数字为负则返回-1,如果数字为0则返回0。

我们必须以两种方式做到这一点,第一种是使用cond,这是相当简单和可理解的,因为书中指出使用cond最适合检查多个表达式。第二种方式是使用if,我有点卡在这里,我不知道如何用if检查。我是这种语言的新手,所以如果这是一个糟糕的问题,我很抱歉。

4 个答案:

答案 0 :(得分:2)

如果您有多个条件,而不是嵌套if,那么使用cond会更明智。但是如果您必须使用if通知您可以嵌套它,请特别注意始终提供"否则"部分适应所有条件并适当地缩进它们:

(define (sign x)
  (if (< x 0)
      -1
      (if (> x 0)
          1
          0)))

答案 1 :(得分:2)

使用cond

(define (sign x)
  (cond ((< x 0) -1)
        ((> x 0) 1)
        (else 0)))

答案 2 :(得分:1)

简单:嵌套if表达式

(if x a (if y b c))

答案 3 :(得分:1)

为了添加其他答案,如果你正在处理整数......你可以这样做!

(define (sign x)
  (if (= x 0)
    0
    (/ x (abs x))))

/abs可能比简单的if贵,所以不管怎么说都不应该使用该解决方案。这只是一个提醒,有时候,你可以通过使用数学获得平等的结果。如果您确定没有任何0,则可以在没有if的情况下解决此问题。