Functional programming 多功能子句头的使用
我正在学习Erlang,并对这种使用多功能子句头的模式感到好奇。以下是一个例子: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) ->
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
你现在可以在这里找到答案,我记得在哈斯克尔是可能的。谢谢