Functional programming 多功能子句头的使用

Functional programming 多功能子句头的使用,functional-programming,erlang,pattern-matching,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。。。在单个函数声明中的,如Haskell和Ocaml等语言所示: sum_left(L, N) ->

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

sum_left(L, 0) ->
    L;
sum_left(L, N) -> 
    [ First, Second | Rest ] = L,
    L_ = [First + Second | Rest],
    sum_left(L_, N - 1).
这比使用
case。。。在单个函数声明中的
,如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中使用函数子句。

您也可以在Haskell中使用它,至少我更喜欢它而不是用例,因为它会减少缩进,并且不需要在元组中封装参数

例如:

interleave (x:xs) (y:ys) = x : y : interleave xs ys
interleave [] ys = ys
interleave xs [] = xs

你现在可以在这里找到答案,我记得在哈斯克尔是可能的。谢谢