所以我想交叉兩個排序列表,這樣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