Gre*_*reg 1 scheme functional-programming
我正在尝试运行以下代码:
(define (myadd x y)
(+ x y)
)
(myadd '(3 4))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
Error: +: number required, but got (3 4) [myadd, +]
Run Code Online (Sandbox Code Playgroud)
如何让 myadd 函数返回 7?
这是您应该如何调用您的程序:
(myadd 3 4) ; option 1
Run Code Online (Sandbox Code Playgroud)
因为它需要两个参数xand y,它们在示例中绑定到3和4。这行不通:
(myadd '(3 4))
Run Code Online (Sandbox Code Playgroud)
上面是通过一个单一的参数-具有两个单元的明细表。不仅参数的数量是错误的,类型也是错误的,因为该过程需要两个数字。
现在,如果您想传递给myadd过程的两个值是来自其他地方的列表,您有两个选项可以传递它们,或者显式提取它们:
(define args '(3 4))
(myadd (car args) (cadr args)) ; option 2
Run Code Online (Sandbox Code Playgroud)
或使用apply列表调用您的过程:
(apply myadd '(3 4)) ; option 3
Run Code Online (Sandbox Code Playgroud)
上面详述的三个选项中的任何一个都将返回值7,但我敢打赌您只对最简单的一个感兴趣,即选项 #1。