使用 if in scheme 来检查多个结果

Using if in scheme to check multiple consequences

我找到了解决方法:

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

刚刚在我的大学开始了一个计划 class。我们得到的其中一个练习是定义一个名为 sign 的过程,它以一个数字作为参数,并且 returns 如果数字为正数则​​为 1,如果数字为负数则为 -1,如果数字为 0 则为 0。

我们必须通过两种方式来做到这一点,第一种是使用 cond,这是相当简单易懂的,因为书中说使用 cond 最适合检查多个表达式。第二种方法是使用 if,我有点卡在这里,我不确定如何使用 if 来检查它。我是这种语言的新手,如果这是一个不好的问题,我很抱歉。

简单:嵌套 if 表达式

(if x a (if y b c))

如果您有多个条件,与其嵌套 if,不如使用 cond. But if you have to use if 更明智,注意您可以嵌套它,请特别注意始终提供 "else" 部分到所有条件并正确缩进它们:

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

使用cond:

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

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

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

但是 /abs 可能比简单的 if 更昂贵,所以您无论如何都不应该使用该解决方案。这只是提醒,有时候,您可以通过使用数学得到等效的结果。如果你确定没有任何 0,你可以在没有 if.

的情况下解决这个问题