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