我正在学习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中使用函数子句。
答案 0 :(得分:1)
你也可以在Haskell中使用它,至少我比使用case更喜欢它,因为它会减少缩进,你不需要在元组中包装参数。
例如:
{{1}}