具有 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
应用(调用)到参数 a
、b
和 c
,而 (f)
表示应用(调用)函数 f
(不带参数)。
所以在你的代码中 (y)
意味着应用数字 2
(y
的当前值),但是 2 不是一个函数,而是一个数字(如错误消息)。
只需将代码更改为:
(define (larger x y)
(if (> x y)
x
y))
(larger 1 2)
很久以前就学会了 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
应用(调用)到参数 a
、b
和 c
,而 (f)
表示应用(调用)函数 f
(不带参数)。
所以在你的代码中 (y)
意味着应用数字 2
(y
的当前值),但是 2 不是一个函数,而是一个数字(如错误消息)。
只需将代码更改为:
(define (larger x y)
(if (> x y)
x
y))
(larger 1 2)