计划的新手,但试图学习基础知识。
假设我将一个列表作为参数传递,我希望将每个元素乘以-1
。现在我有这个:
(define (negative b)
(* (car b) -1 )))
这将第一个元素作为-1 *
返回该元素
所以在这种情况下给它(negative '(5 1 2 3))
返回-5
。
但是让我说我希望它回归
-5 -1 -2 -3
如何让列表的其余部分为负数?递归使用cdr?
递归地做。
(define (negative l)
(if (null? l)
'()
(cons (* (car l) -1)
(negative (cdr l)))))
如果列表为空,则只返回一个空列表,作为基本情况。
否则,它计算-1 *
第一个元素,列表其余部分的负数,并将它们组合以产生结果。
练习的目的可能是为了编写自己的地图程序,在这种情况下,这很好。但如果没有,请使用scheme的内置“map”程序,该程序仅用于此类目的。
至少自R4RS(即很久以前)以及可能更早以来,'map'已经可用。
通过使用地图。如果你想将它作为列表返回。
就像这样
(define negative
(lambda (b)
(map - b)))
地图通过列表b,并对列表中的每个数字应用程序“ - ”
如果要返回不在列表中的单个数字,则在列表中应用值。
(define negative1
(lambda (b)
(apply values (map - b))))
编辑:我看到你要求递归解决方案,这将是这样的
(define negative1
(lambda (b)
(if (null? b)
'()
(cons (- (car b)) (negative1 (cdr b))))))