如何在scheme中增加列表?
新的计划,但试图学习的基础 假设我传入了一个列表作为参数,我想将每个元素乘以如何在scheme中增加列表?,scheme,Scheme,新的计划,但试图学习的基础 假设我传入了一个列表作为参数,我想将每个元素乘以-1。现在我有这个: (define (negative b) (* (car b) -1 ))) 它将第一个元素返回为该元素的-1* 因此,在本例中,给它(负数)(5123))返回-5 但是我想让它回来 -5 -1 -2 -3 我该怎么做才能让列表中的其他部分变成负数呢?递归地使用cdr?递归地执行 (define (negative l) (if (null? l) '() (con
-1
。现在我有这个:
(define (negative b)
(* (car b) -1 )))
它将第一个元素返回为该元素的-1*
因此,在本例中,给它(负数)(5123))
返回-5
但是我想让它回来
-5 -1 -2 -3
我该怎么做才能让列表中的其他部分变成负数呢?递归地使用cdr?递归地执行
(define (negative l)
(if (null? l)
'()
(cons (* (car l) -1)
(negative (cdr l)))))
如果列表为空,则返回一个空列表,作为基本情况
否则,它将计算第一个元素,即列表其余部分的负数,并将它们组合起来生成结果。您练习的目的可能是为自己的映射过程编写代码,在这种情况下可以。但如果不是,则使用scheme的内置“映射”过程,该过程仅用于此类目的
“地图”至少在R4RS(也就是说,很久以前)和更早的时候就已经可用了。使用地图。如果您希望它作为列表返回 是这样的
(define negative
(lambda (b)
(map - b)))
(define negative1
(lambda (b)
(if (null? b)
'()
(cons (- (car b)) (negative1 (cdr b))))))
Map正在遍历列表b,并对列表中的每个数字应用程序“-”
如果要作为列表中不包含的单个数字返回,请应用列表中的值
(define negative1
(lambda (b)
(apply values (map - b))))
编辑:我看到您要求递归解决方案,结果如下所示
(define negative
(lambda (b)
(map - b)))
(define negative1
(lambda (b)
(if (null? b)
'()
(cons (- (car b)) (negative1 (cdr b))))))
第一个参数的目的是什么?什么是
-5-1-2-3
?你能生成一个表达式来产生那个奇怪的值吗?@jpyams使用一个像样的代码编辑器时不会发生这种情况,但是SO编辑器不能帮助你平衡参数。我在SO上的每种语言都有这个问题。SO的emacs模式非常容易安装:@coredump Nice,但我仍然在Mac上运行emacs 22.x(我有大量旧的emacs加载项,不能与新版本一起使用)。