多功能子句标题的使用

Posted

技术标签:

【中文标题】多功能子句标题的使用【英文标题】:Use of Multiple Function Clause Heads 【发布时间】:2018-09-11 23:27:21 【问题描述】:

我正在学习 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 中使用函数子句。

【问题讨论】:

你可以在这里找到答案***.com/q/1050913/3557946 【参考方案1】:

你也可以在 Haskell 中使用它,至少我更喜欢它而不是使用大小写,因为它可以减少缩进并且你不需要将参数包装在一个元组中。

例如:

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

【讨论】:

现在我记得在 Haskell 中是可能的。谢谢。

以上是关于多功能子句标题的使用的主要内容,如果未能解决你的问题,请参考以下文章

JPQL:如何使用 where 子句实现与集合成员声明相同的功能?

没有聚合功能的 GROUP BY 子句有啥原因吗?

搜索功能 - 加入具有多行和 where 子句的查找表

oracle功能强大的with子句

来自给定数组的查询中的 Laravel 多个 where 子句

在sql语句中,ORDERBY子句的功能是()