List 在Scheme中创建一个函数,以减去两个列表

List 在Scheme中创建一个函数,以减去两个列表,list,function,scheme,List,Function,Scheme,我对Scheme和StackOverflow都很新! 所以,对于第一次接触,我想在Scheme中做一些简单易行的事情。 我想定义一个函数,它减去引入列表中的元素 例如,输入应该是:(sub'(4126)'(063)) 输出应为:(4 6 3) 谢谢 您需要的是有一个基本情况,即检查任一列表是否为空,并将其计算为空列表,或者与每个列表的第一个元素的计算和其余两个列表的递归进行配对。基本上,你会得到: (cons (- 4 0) (cons (- 12 6) (cons (- 6 3) '())))

我对Scheme和StackOverflow都很新! 所以,对于第一次接触,我想在Scheme中做一些简单易行的事情。 我想定义一个函数,它减去引入列表中的元素

例如,输入应该是:(sub'(4126)'(063)) 输出应为:(4 6 3)


谢谢

您需要的是有一个基本情况,即检查任一列表是否为空,并将其计算为空列表,或者与每个列表的第一个元素的计算和其余两个列表的递归进行配对。基本上,你会得到:

(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))

好了。你已经走到一半了。

你好,西尔维斯特,非常感谢你的回答。这对我很有帮助。我还有另一个问题:为什么这样做?:(定义(否定列表lst lst2)(映射-lst lst2))(否定列表’(11 12 13 14)’(1 2 3 4)),而这没有:(定义(子一个lst)(映射-lst 1))(子一个’(11 12 13 14))我如何定义一个简单的函数来从给定列表中进行子搜索?感谢you@JackGreen
map
second to n参数需要是列表,因为它将过程应用于每个参数的第一个元素。什么是
(汽车1)
(cdr 1)
?您可以这样做:
(map(lambda(e)(-e1))”(111314));=>(10 11 12 13)
谢谢你的回答,西尔维斯特!!这真的很有帮助。还有一个enquery,为什么它不起作用?:(define(next lst))(map(lambda(e)(+e1))(next'(1234))。输出应该是(2345)@JackGreen它不起作用的原因是因为你有
define
,但是你的
map
表达式在它之外。与我的评论不同,你的
map
中没有任何列表参数,我已经工作了几个小时,但我不能工作:(define(next lst)(map(lambda(lst)(+lst 1)))它既不工作,我不知道如何修复它…任何帮助,请。