function - 通过 Scheme 对列表中的所有元素进行平方
问题描述
我想通过 Scheme 编程语言对列表中的所有元素进行平方。我的代码是:
(define (square n) (* n *n))
(define (fun items factor)
(if (null? items)
0
(cons (* (fun (car items)
factor))
(fun (cdr items)
factor) ) ) ) )
(display (fun '( 1 2 3 4) square))
我正在显示这些错误:
ERROR: In procedure car:
ERROR: In procedure car:
Wrong type (expecting pair): 1
解决方案
你有几个错误:
- 该程序有一个不应该存在
square
的额外内容*
- 如果我们正在构建一个列表作为输出,那么基本情况应该返回空列表
'()
,而不是0
。 - 对列表的当前元素进行操作的部分不正确,您只需调用列表
factor
上的过程即可car
,无需再次乘法,square
会处理的。
这应该修复它们:
(define (square n) (* n n))
(define (fun items factor)
(if (null? items)
'()
(cons (factor (car items))
(fun (cdr items) factor))))
在现实生活中,你不需要自己实现这个过程,map
它已经内置了,使用起来很简单:
(map square '(1 2 3 4))
=> '(1 4 9 16)
推荐阅读
- c++ - 为什么 gcc 在 v. 7.1 中开始检查模板类的非实例化方法?
- python-3.x - 如何使用python3检查url是向上还是向下
- reactjs - 当我点击实际的img时,我怎样才能看到放大的图像
- arrays - ngFor中的Angular 7对象数组仅显示具有特定对象属性值的数据
- applescript - 终端退出而不执行操作
- javascript - 使用 Shiny 链接文件夹中的文件
- python - 如何解决猜谜游戏
- c - linux内核如何分离同一线程组中多个线程的用户空间堆栈?
- javascript - 将不同的值从数组传递到组件
- amazon-web-services - 授予 IAM 用户在 Python 中创建 lambda 部署包的策略是什么?