如何在scheme编程中使用if语句?

如何在scheme编程中使用if语句?,scheme,Scheme,我刚开始学习scheme语言,下面是我遇到的一个问题(我的代码有什么问题吗?因为错误消息有点奇怪) Prompt:定义一个过程,在该过程上方或下方接收数字x和数字y并返回以下内容: -如果x小于y,则为1 如果x等于y,则为0 如果x大于y,则为1 到目前为止,我尝试的是: (定义(x y上方或下方) (如果(xy) 1) ) 错误消息是: scm>(全部加载“”) 回溯(最近一次呼叫最后一次): 0(加法器8) 错误:str不可调用:此处是您的代码 scm>(超过或低于5) #错误:应为 #

我刚开始学习scheme语言,下面是我遇到的一个问题(我的代码有什么问题吗?因为错误消息有点奇怪)

Prompt:定义一个过程,在该过程上方或下方接收数字x和数字y并返回以下内容:
-如果x小于y,则为1
如果x等于y,则为0
如果x大于y,则为1
到目前为止,我尝试的是:
(定义(x y上方或下方)
(如果(xy)
1)
)
错误消息是:
scm>(全部加载“”)
回溯(最近一次呼叫最后一次):
0(加法器8)
错误:str不可调用:此处是您的代码
scm>(超过或低于5)
#错误:应为
#     0
#但是得到

如果
的语法是:

(if condition expression1 expression2)
当条件为真时,其值为表达式1的值,否则为表达式2的值

在您的函数中,您使用:

(if condition expression1)
这是不允许的。此外,请注意,依次执行三个
if
s,并且实际仅使用最后一个的值作为函数调用返回的值

解决此问题的一种方法是使用
的“级联”if

(define (over-or-under x y)
  (if (< x y)
      -1
      (if (= x y)
          0
          1)))
因此,您可以通过以下方式重写函数:

(define (over-or-under x y)
  (cond ((< x y) -1)
        ((= x y) 0)
        (else 1)))
(定义(x y上方或下方)
(条件(
谢谢!这真的很有帮助!
(cond (condition1 expression1)
      (condition2 expression2)
      ...
      (else expressionN))
(define (over-or-under x y)
  (cond ((< x y) -1)
        ((= x y) 0)
        (else 1)))