我有一个清单:
[objA; objB; objC; objD]
我需要进行以下缩减:
obj - > obj - > OBJ
即:
objA objB - > objB'
然后收回原始列表,以便我得到:
[objB'; objC; objD]
我正在尝试执行以下操作:
let rec resolveConflicts = function
| [] -> []
| [c] -> resolveConflict c
| [x;y] -> resolveConflict x
|> List.filter getMovesRelatedtoY
|> List.append y
|> resolveConflict
| [x;y::tail] ->
let y' = resolveConflict x
|> List.filter getMovesRelatedtoY
|> List.append y
resolveConflicts y'::tail
这种语法不正确,可能是我甚至没有使用正确的工具......我对任何合适的解决方案持开放态度,以便我可以学习。
至于为什么,我过滤列表并将其追加到另一个,只是每个冲突都是一个移动列表。
答案 0 :(得分:15)
要匹配第一个元素,第二个元素和列表的其余部分,请使用以下模式:
| fst::snd::rest ->
您可以使用此样式匹配任意数量的第一个元素:
| fst::snd::thrd:: ... ::rest ->