我想回答的问题是: 编写一个名为merge的函数(在Dr.Racket / Scheme中),从两个玩具列表(玩具1和玩具2)中生成玩具列表。这个产生的清单将有玩具1和玩具2的交替玩具,第一个值来自玩具1。此外,如果玩具1和玩具2中的第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))]))
现在我遇到的问题是我不知道如何在最终生成的列表中包含删除重复的条件。 任何建议都会对我有帮助!
答案 0 :(得分:0)
在我看来,有两种方法可以摆脱重复:
merge-help
然后创建一个函数merge
来完成。从merge-help
生成的列表中删除重复项。这样做会更容易实现,但是不能保证您的列表符合要求,即它可能没有正确交错。解决方案1肯定更乏味但它会给你更好的结果。我的建议是首先从名为remove-dups
的函数中删除任一列表中的重复项或类似的东西。然后,在新更改的列表中,如果您遵循soegaard's建议,请实施您当前的merge
,这似乎会起作用。