使用多功能条款头

时间:2018-04-02 18:15:03

标签: functional-programming erlang pattern-matching

我正在学习Erlang并对使用多个函数子句头的这种模式感到好奇。这是一个例子:

sum_left(L, 0) ->
    L;
sum_left(L, N) -> 
    [ First, Second | Rest ] = L,
    L_ = [First + Second | Rest],
    sum_left(L_, N - 1).

这比在单个函数声明中使用case ... of更常见,如Haskell和Ocaml等语言中所示:

sum_left(L, N) ->
    case N of
        0 -> 
            L;
        _ -> 
            [ First, Second | Rest ] = L,
            L_ = [First + Second | Rest],
            sum_left(L_, N - 1)
    end.

除了诸如功能体的可读性和简洁性之类的美容原因之外,第一个约定可能是第二个约定的动机?

编辑:正如答案所指出的那样,可以在Haskell中使用函数子句。

1 个答案:

答案 0 :(得分:1)

你也可以在Haskell中使用它,至少我比使用case更喜欢它,因为它会减少缩进,你不需要在元组中包装参数。

例如:

{{1}}