具有 2 个参数的计划过程

Scheme procedure with 2 arguments

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

(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)

我相信这两者是等价的,即 if x > y, return x;否则,return y.

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

我花了几个小时阅读 SICP 和 TSPL,但没有任何内容跳出(也许我需要使用 "list" 并通过 car[=29 引用这两个元素=] 和 cdr?)

感谢任何帮助。如果我发错了,错过了之前对同一问题的回答,或者有其他不当之处,我深表歉意。

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

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

所以在你的代码中 (y) 意味着应用数字 2y 的当前值),但是 2 不是一个函数,而是一个数字(如错误消息)。

只需将代码更改为:

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

(larger 1 2)