List 如何编写将两个列表合并在一起的函数?

List 如何编写将两个列表合并在一起的函数?,list,merge,racket,List,Merge,Racket,我想回答的问题是: 编写一个名为merge的函数(在Dr.Racket/Scheme中),该函数从两个玩具列表(toys1和toys2)生成玩具列表。这个生产清单将有来自toys1和toys2的交替玩具,第一个值来自toys1。此外,如果toys1和toys2中的第n个玩具是相同的玩具(颜色和类型),则生成的列表应仅包含一个具有该颜色和类型的玩具结构(例如,未复制)。如果列表长度不同,则列表中的最后一个k玩具将是较长列表中的最后一个k玩具 使用以下结构完成此问题: (define-struct

我想回答的问题是: 编写一个名为merge的函数(在Dr.Racket/Scheme中),该函数从两个玩具列表(toys1和toys2)生成玩具列表。这个生产清单将有来自toys1和toys2的交替玩具,第一个值来自toys1。此外,如果toys1和toys2中的第n个玩具是相同的玩具(颜色和类型),则生成的列表应仅包含一个具有该颜色和类型的玩具结构(例如,未复制)。如果列表长度不同,则列表中的最后一个k玩具将是较长列表中的最后一个k玩具

使用以下结构完成此问题:

(define-struct toy (color type))
;; A Toy is a (make-toy Str Str)
该计划的一个例子是:

(merge (list (make-toy "blue" "ball") (make-toy "blue" "spring") 
   (make-toy "red" "helmet") (make-toy "purple" "band"))
   (list (make-toy "yellow" "van") (make-toy "blue" "spring")))
产生

(list (make-toy "blue" "ball") (make-toy "yellow" "van")
  (make-toy "blue" "spring") (make-toy "red" "helmet")
  (make-toy "purple" "band"))
现在,我创建的程序如下所示:

(define (merge toys1 toys2)
  (cond
     [(empty? toys1) toys2]
     [(empty? toys2) toys1]
     [else
         (first toys1) (first toys2)
         (merge (rest toys1) (rest toys2))]))
现在我遇到的问题是,我不知道如何在最终生成的列表中包含删除重复的条件。
任何建议都会对我大有帮助

在我看来,有两种方法可以消除重复:

  • 在构建列表时,请确保没有输入重复的值。如果这样做,将发生的情况是,如果不插入重复的值并在列表中插入下一个值,则会打乱两个列表的交错顺序。但同时,你也要确保你得到一份合适的交替列表
  • 在您已经构建了列表之后,检查并删除重复项。这可以通过调用当前函数
    合并帮助
    ,然后创建一个函数
    合并
    ,从
    合并帮助
    生成的列表中删除重复项来完成。这样做会更容易实现,但不能保证您的列表满足要求,也就是说,它可能没有正确地交错

  • 解决方案1肯定更乏味,但它会给您带来更好的结果。我的建议是首先从名为
    remove dup
    的函数或类似函数的列表中删除重复项。然后在新更改的列表上,执行当前的
    合并
    ,如果您遵循建议,它似乎会起作用

    抱歉,这看起来像是一个家庭作业请求,这不是StackOverflow的目的。请试着自己解决这个问题,如果你遇到麻烦,那么你可以请求帮助解决这个问题。好的,谢谢你让我知道!实际上,家庭作业是可以的,您应该先尝试自己解决问题,然后询问您现有的实现。(如果您确实考虑了解决方案并且遇到了问题,请继续阅读):检查:如果两者都不是空的,请将每个列表的第一个元素放入累加器中,使用
    (rest lst1)
    (rest lst2)递归
    else将非空的一个放在累加器的末端,然后完成。你们是否有机会在华盛顿大学学习CS115/CS135?大家好,谢谢你们的输入!我最近编辑了我的问题,并将其添加到我目前正在编写的代码中。任何建议都很好!!