4

在具有至少两个元素pos1和的列表上进行以下模式匹配有什么问题pos2

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 ')'

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

4

2 回答 2

4

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

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

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

于 2014-11-25T22:42:30.670 回答
2

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

tailMatch : a -> List a -> List a
tailMatch el list =
  case (el, list) of
    (_, []) -> 
      []
    (_, head :: []) ->
      []
    (el, head1 :: head2 :: tail) ->
      []

第二种模式可以写成(_, [head]) ->你觉得它更具可读性。

于 2016-05-04T14:53:08.677 回答