我是Scheme的新手,也是StackOverflow的新手! 因此,对于第一次接触,我想在Scheme中做一些简单易行的事情。 我想定义一个减去引入列表元素的函数。
例如,输入应为:(sub'(4 12 6)'(0 6 3)) 输出应为:(4 6 3)
谢谢!
答案 0 :(得分:0)
你需要的是有一个基本情况,你检查一个列表是否为空并将其评估为空列表,或者你计算每个列表的第一个元素和其余的递归这两个清单。基本上你最终得到:
(cons (- 4 0) (cons (- 12 6) (cons (- 6 3) '()))) ; ==> (4 6 3)
作为递归列表处理函数的一个例子,这里是一个否定所有元素的函数:
(define (negate-list lst)
(if (null? lst)
'()
(cons (- (car lst))
(negate-list (cdr lst)))))
(negate-list '(1 2 3 4)) ; ==> (-1 -2 -3 -4)
现在有更多奇特的方法可以做到这一点。例如,。你可以使用尾递归:
(define (negate-list lst)
(let loop ((lst lst) (acc '()))
(if (null? lst)
(reverse acc)
(loop (cdr lst)
(cons (- (car lst)) acc)))))
您可以使用map
:
(define (negate-list lst)
(map - lst))
所以你去吧。你在那里的一半。