匹配列表的前两个元素

时间:2014-06-18 09:15:02

标签: f#

我有一个清单:

  

[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

这种语法不正确,可能是我甚至没有使用正确的工具......我对任何合适的解决方案持开放态度,以便我可以学习。

至于为什么,我过滤列表并将其追加到另一个,只是每个冲突都是一个移动列表。

1 个答案:

答案 0 :(得分:15)

要匹配第一个元素,第二个元素和列表的其余部分,请使用以下模式:

| fst::snd::rest ->

您可以使用此样式匹配任意数量的第一个元素:

| fst::snd::thrd:: ... ::rest ->