【发布时间】:2011-06-13 15:58:59
【问题描述】:
Erlang 新手。我即将开始编写一些代码。我想到的解决方案可以采用两种方式之一。我可以做一堆数学计算,或者我可以将其编码为模式匹配。当我说“模式匹配”时,我不是指正则表达式或类似的东西——我指的是子句头部中的模式匹配。
性能通常不是问题,但在这个应用程序中却是。我不是在问你哪种方法会更快——我敢肯定你会说你不知道(取决于许多因素)。我要问的是 Erlang 模式匹配在子句头中的一般性能。换句话说,在 Prolog 中,引擎被优化来做这种事情,所以在所有其他条件相同的情况下,你被“鼓励”设计一个利用模式匹配和子句统一的解决方案。
Erlang 是否也是如此,即 Erlang 是否针对子句头部的模式匹配进行了优化,类似于 Prolog?我实际上并没有在这里问这个问题,而是尝试在 Erlang 中对此进行分析,并编写了一个玩具程序来进行几百万次子句头部的模式匹配,而不是对一个列表求和几百万次。但是如果设置为“几百万次”,系统就会崩溃。但是如果设置为少于几百万,结果会返回得太快,以至于我对性能一无所知。
感谢您提供任何见解。
【问题讨论】:
-
发布 Codz。改写为一个关于为什么会崩溃的问题。
-
代码是 2 个非常简单的程序。第一个程序是 10 个子句头,序列子句 (0) -> 0;子句(1)-> 0; (最多 10 个)为了测试,我使用 duplicate 创建了一个包含 200 万个 0 的列表,并使用 map to map 子句到它上面。第二个程序只是简单地使用 duplicate 创建 200 万个包含 7 个整数的列表,然后使用 map 将 sum 映射到它上面。我再次尝试测试用作编程技术的模式匹配的相对性能。我的问题是是否鼓励 Erlang 程序员像 Prolog 程序员一样使用模式匹配(在可行的情况下)。
标签: performance erlang pattern-matching