functional-programming - 使用方案调用函数
问题描述
我正在尝试运行以下代码:
(define (myadd x y)
(+ x y)
)
(myadd '(3 4))
但是,我收到以下错误:
Error: +: number required, but got (3 4) [myadd, +]
如何让 myadd 函数返回 7?
解决方案
这就是你应该如何调用你的过程:
(myadd 3 4) ; option 1
因为它需要两个参数x
and y
,它们在示例中绑定到3
and 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。
推荐阅读
- haskell - 传递可选构建参数时,从 GitHub 构建 Haskell nix 表达式失败
- vue.js - Vuetify v-carousel 多个组件
- r - 用ggplot制作条形图但不显示条形
- python - 使用过滤器绘制值 - Matplotlib 不支持生成器作为输入
- node.js - 数据库客户端抽象
- c# - 无法将新脚本添加到 Unity3d 中的对象
- python-3.x - 单击时如何打印从列表创建的标签中的文本
- snowflake-cloud-data-platform - 无法使用 EC2 上新创建的 Airflow 环境连接到 Snowflake
- javascript - 如何根据 textContent 值更改每个标签的 CSS 类
- angular - Angular中的bulma scss变量自定义