使用方案调用函数

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?

Ósc*_*pez 5

这是您应该如何调用您的程序:

(myadd 3 4) ; option 1
Run Code Online (Sandbox Code Playgroud)

因为它需要两个参数xand y,它们在示例中绑定到34。这行不通:

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