所以我想交叉两个排序列表,这样intersect ([1;1;1;2;2], [1;1;2;4])
将返回[1;1;2]
。我来了这么远:F#相交两个列表
let rec intersect (xs, xs') =
match xs, xs' with
| ([], []) -> []
| (x::tail, []) -> []
| ([], x'::tail') -> []
| (x::tail, x'::tail') -> if x = x' then x::intersect(tail, tail')
else intersect(tail, xs')
但我不太确定该从哪里出发。该函数需要一个包含两个列表的元组,并且我假设当每个列表的头部彼此相等时,我开始建立一个新列表,但是我错过了一些我无法想象并期望的东西得到一个提示。
编辑:我知道我可以使用库函数来轻松解决这个,但是这没有乐趣:)
输入列表是否已排序? – Lee
是的,他们是。我会添加这些信息。 – Khaine775
我有一个解决方案,但我不会发布它...在模式匹配中处理更多的情况:如果只有一个列表是空的,该怎么办?在'if'表达式中还有另外一种情况需要处理:如果'x
TheQuickBrownFox