我一直在为看起来像一个简单算法的东西而苦苦挣扎,但到目前为止还找不到一种干净的方式来以函数式风格表达它。这是问题的概要:假设我有 2 个数组 X 和 Y,
X = [| 1; 2; 2; 3; 3 |]
Y = [| 5; 4; 4; 3; 2; 2 |]
我想要的是检索匹配的元素和不匹配的元素,例如:
matched = [| 2; 2; 3 |]
unmatched = [| 1; 3 |], [| 4; 4; 5 |]
在伪代码中,这就是我解决问题的方式:
let rec match matches x y =
let m = find first match from x in y
if no match, (matches, x, y)
else
let x' = remove m from x
let y' = remove m from y
let matches' = add m to matches
match matches' x' y'
我遇到的问题是"remove m from x"
部分 - 我找不到一个干净的方法来做到这一点(我有工作代码,但它很难看)。是否有一种很好的、惯用的函数式方法来解决该问题,无论是删除部分,还是编写算法本身的不同方法?