如何在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加载项,不能与新版本一起使用)。