计划新手,但试图学习基础知识。
我们说我作为参数传递了一个列表,我希望将每个元素乘以-1
。现在我有这个:
(define (negative b)
(* (car b) -1 )))
返回第一个元素-1 *
元素
所以在这种情况下,给它(negative '(5 1 2 3))
会返回-5
。
但是我想让它返回
-5 -1 -2 -3
我如何才能使列表的其余部分为负?递归使用cdr?
答案 0 :(得分:3)
递归地做。
(define (negative l)
(if (null? l)
'()
(cons (* (car l) -1)
(negative (cdr l)))))
如果列表为空,则只返回一个空列表,作为基本情况。
否则,它会计算-1 *
第一个元素,列表其余部分的负数,并将它们组合起来产生结果。
答案 1 :(得分:0)
练习的目的可能是为了编写自己的地图程序,在这种情况下,这很好。但如果没有,请使用scheme的内置“map”程序,该程序仅用于此类目的。
'map'至少从R4RS(也就是很久以前)开始,可能更早。
答案 2 :(得分:0)
使用地图。如果你想将它作为列表返回。
就像这样
(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))))))