列表上的模式匹配,在Elm中至少有两个元素

时间:2014-11-25 21:34:32

标签: elm

在包含至少两个元素pos1pos2的列表中,以下模式匹配有什么问题?

type Pos = (Float, Float)
type Tail = [Pos]

tail_cut : Float -> Tail -> Tail
tail_cut _ [] = []
tail_cut _ [pos] = [pos]
tail_cut cut (pos1:pos2:poss) = []   --line 91

[1 of 1] Compiling Main
Parse error at (line 91, column 19):
unexpected ":"
expecting "::", pattern, whitespace, comma ',' or closing paren ')'

请注意,我没有发布正文,只返回一个空列表以保持片段小。

2 个答案:

答案 0 :(得分:4)

在Elm中,cons定义为::而不是:

请参阅:http://library.elm-lang.org/catalog/elm-lang-Elm/0.13/List

应该这样做:(pos1::pos2::poss)

答案 1 :(得分:2)

接受的答案不再适用于Elm> = 0.15,不再支持多行函数定义。我已经摆脱了类型以提供更一般的答案。

 String AppforUID context.getPackageManager().getNameForUid(UID);

如果您发现第二种模式更具可读性,则可以将其写为tailMatch : a -> List a -> List a tailMatch el list = case (el, list) of (_, []) -> [] (_, head :: []) -> [] (el, head1 :: head2 :: tail) -> []