【问题标题】:Scheme procedure with 2 arguments带有 2 个参数的方案过程
【发布时间】:2017-02-16 09:41:54
【问题描述】:

很久以前就学会了 C 代码;想用 Scheme 尝试一些新的和不同的东西。我正在尝试制作一个接受两个参数并返回两者中较大者的过程,例如

(define (larger x y)
  (if (> x y)
    x
    (y)))

(larger 1 2)

或者,

(define larger
  (lambda (x y)
    (if (> x y)
      x (y))))

(larger 1 2)

我相信这两者是等价的,即 如果 x > y, return x;否则,返回 y

当我尝试其中任何一个时,都会出现错误,例如2 不是函数错误:无法调用:2

我花了几个小时阅读 SICP 和 TSPL,但什么都没有跳出来(也许我需要使用“列表”并通过 carcdr 引用这两个元素?)

任何帮助表示赞赏。如果我发错帖、错过了对同一问题的先前答案或其他不当之处,我深表歉意。

【问题讨论】:

    标签: scheme mit-scheme


    【解决方案1】:

    原因在于,与 C 和许多其他语言不同,在 Scheme 和所有 Lisp 语言中,括号是语法的重要组成部分。

    例如它们用于函数调用:(f a b c) 表示应用(调用)函数f 到参数abc,而(f) 表示应用(调用)函数@ 987654327@(不带参数)。

    所以在您的代码中(y) 表示应用数字2y 的当前值),但 2 不是函数,而是数字(如错误消息中所示)。

    只需将代码更改为:

    (define (larger x y)
      (if (> x y)
          x
          y))
    
    (larger 1 2)
    

    【讨论】:

    • 太棒了!谢谢!我证实这有效。我可以看到 2 被视为一个函数,但我不明白为什么/如何。来自 C 的明确偏见。再次感谢。 :-)
    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 2017-03-08
    • 2023-02-21
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多