展示其优点的Erlang代码片段?

展示其优点的Erlang代码片段?,erlang,Erlang,我将向一组C/C++程序员做一个小型演示,他们对函数式语言几乎没有经验。演示的一部分提到了Erlang,我想给出一个具体的小代码示例 关于StackOverflow,有大量关于Erlang的使用方式/位置及其优势的信息。我看到的一个最常见的优点是,它可以用一点简洁的代码做很多事情,特别是与C/C++相比 我正在寻找一个很好的Erlang代码片段,它简单地说明了这些好处。特别是一些在Erlang中只需几行就可以轻松完成的事情,在C/C++中要复杂得多 有人有什么有趣的建议吗?请查看Erlang位语

我将向一组C/C++程序员做一个小型演示,他们对函数式语言几乎没有经验。演示的一部分提到了Erlang,我想给出一个具体的小代码示例

关于StackOverflow,有大量关于Erlang的使用方式/位置及其优势的信息。我看到的一个最常见的优点是,它可以用一点简洁的代码做很多事情,特别是与C/C++相比

我正在寻找一个很好的Erlang代码片段,它简单地说明了这些好处。特别是一些在Erlang中只需几行就可以轻松完成的事情,在C/C++中要复杂得多


有人有什么有趣的建议吗?

请查看Erlang位语法的优秀示例。我相信很多c/c++开发人员都会欣赏语法的简洁

我将使用一个示例来说明并发是多么容易

所以基本上写MapReduce(但永远不要用这个词来向C程序员描述它)


您可以从显示播放的程序开始,然后继续使其并发。应该很容易放进白板或两页powerpoint。

一位同事建议使用合并排序作为示例:

多进程版本:

pMergeSort(L) when length(L) == 1 -> L;
pMergeSort(L) when length(L) > 1 ->
    {L1, L2} = lists:split(length(L) div 2, L),
    spawn(mergesort, pMergeSort2, [L1, self()]),
    spawn(mergesort, pMergeSort2, [L2, self()]),
    mergeResults([]).

pMergeSort2(L, Parent) when length(L) == 1 -> Parent ! L;
pMergeSort2(L, Parent) when length(L) > 1 ->
    {L1, L2} = lists:split(length(L) div 2, L),
    spawn(mergesort, pMergeSort2, [L1, self()]),
    spawn(mergesort, pMergeSort2, [L2, self()]),
    Parent ! mergeResults([]).

阶乘代码片段是我一直用来展示erlang程序有多短的最好的代码片段

-module(factorial). -export([calculate/1]). calculate(0) -> 1; calculate(N) -> N * calculate(N -1).
<>这可能不是最短的C++版本,但我知道你明白了。

< PythGrangaTuple。根据毕达哥拉斯的说法,所有的数字组合都在30以下,3个数字组成一个直角三角形

[{X,Y,Z} || X <- lists:seq(1,30),
            Y <- lists:seq(1,30),
            Z <- lists:seq(1,30), ((X * X) + (Y * Y)) == (Z * Z)].

[{X,Y,Z}| | X对我来说是一个有趣的想法,恰巧Fizz Buzz是这个群体中常用的一个例子!我喜欢这个例子,尽管它并没有真正展示Erlang的优点,而是展示了函数编程的优点。你可以在C/C++中使用递归。C/C++中的等效函数应该是:
int factorial(int N){if(N==0)返回1;else返回N*阶乘(N-1);}我的C++是最差的。谢谢@ MistaFaZZutkTurk,但是上面的Erlang阶乘代码不是最后一个调用优化的。最后一个调用是N乘,在第一个调用到计算/ 1可以完成之前等待任意数量的栈返回。需要计算/ 2来累加LCO的累加器来工作。在
Pythagorean三元组上查看我的新答案
查看我在Pythagorean三元组上的新答案 #include<iostream.h> #include<conio.h> long factorial(unsigned int a); void main() { unsigned int a; long fac; ..... ..... return factorial(a); } long factorial(unsigned int x) { long fac=1; if(x == 0) {return 1;} else { while(x > 0) { fac *= x; x -= 1 ; } return fac; } }
[{X,Y,Z} || X <- lists:seq(1,30),
            Y <- lists:seq(1,30),
            Z <- lists:seq(1,30), ((X * X) + (Y * Y)) == (Z * Z)].