List 如何编写将两个列表合并在一起的函数?
我想回答的问题是: 编写一个名为merge的函数(在Dr.Racket/Scheme中),该函数从两个玩具列表(toys1和toys2)生成玩具列表。这个生产清单将有来自toys1和toys2的交替玩具,第一个值来自toys1。此外,如果toys1和toys2中的第n个玩具是相同的玩具(颜色和类型),则生成的列表应仅包含一个具有该颜色和类型的玩具结构(例如,未复制)。如果列表长度不同,则列表中的最后一个k玩具将是较长列表中的最后一个k玩具 使用以下结构完成此问题:List 如何编写将两个列表合并在一起的函数?,list,merge,racket,List,Merge,Racket,我想回答的问题是: 编写一个名为merge的函数(在Dr.Racket/Scheme中),该函数从两个玩具列表(toys1和toys2)生成玩具列表。这个生产清单将有来自toys1和toys2的交替玩具,第一个值来自toys1。此外,如果toys1和toys2中的第n个玩具是相同的玩具(颜色和类型),则生成的列表应仅包含一个具有该颜色和类型的玩具结构(例如,未复制)。如果列表长度不同,则列表中的最后一个k玩具将是较长列表中的最后一个k玩具 使用以下结构完成此问题: (define-struct
(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?大家好,谢谢你们的输入!我最近编辑了我的问题,并将其添加到我目前正在编写的代码中。任何建议都很好!!