首页 > 解决方案 > 使用方案调用函数

问题描述

我正在尝试运行以下代码:

(define (myadd x y)
    (+ x y)
)

(myadd '(3 4))

但是,我收到以下错误:

Error: +: number required, but got (3 4) [myadd, +]

如何让 myadd 函数返回 7?

标签: functional-programmingscheme

解决方案


这就是你应该如何调用你的过程:

(myadd 3 4) ; option 1

因为它需要两个参数xand y,它们在示例中绑定到3and 4。这不起作用:

(myadd '(3 4))

上面传递了一个参数 - 一个包含两个元素的列表。不仅参数的数量错误,类型也错误,因为过程需要两个数字。

现在,如果您要传递给myadd过程的两个值作为来自其他地方的列表,您有两个选项可以传递它们,或者显式提取它们:

(define args '(3 4))
(myadd (car args) (cadr args))  ; option 2

或使用apply列表调用您的过程:

(apply myadd '(3 4))  ; option 3

上面详述的三个选项中的任何一个都将返回 的值7,但我敢打赌您只对最简单的选项感兴趣,即选项 #1。


推荐阅读