函数式编程模型效率(特定于Erlang)

3 erlang functional-programming

嗨,我是Erlang世界的新手.当我想到我们需要如何解决以下问题时(并且有一长串类似的问题),我认为它真的效率很低,因为我们说的是很多递归.显然,像C/Java这样的语言不需要笨拙的递归来解决这个问题,但是对于Erlang(我猜其他函数式编程语言也需要,也许?)你必须以这种方式做.


例3 - 附加

该程序连接两个列表:

append([], List) -> List;

append([First|Rest], List) -> [First | append(Rest,List)].
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么这不是一个问题?

Zed*_*Zed 12

首先,阅读关于递归的Erlang效率指南.

至于笨拙,不要忘记Erlang列表是单链表,所以你只有一个指向列表头部的"指针",需要通过遍历列表来访问元素.这将需要相同的数量,但不同类型的笨拙与所有指针或参考杂耍的语言.

至于效率,您可以以尾递归的方式实现它.尾部递归被优化(参见这个SO问题),编译后的代码变得与你在C++中实现的类似,唯一的区别是代替指针跳转,堆栈指针是倒带等.

无论如何,尝试在Java和C++中实现相同的功能,然后我们将看到哪一个更笨拙且更具可读性.


RHS*_*ger 6

嗨,我是C世界的新手.当我想到我们需要如何解决以下问题时(并且有一长串类似的问题),我认为这是非常低效的,因为我们说的是很多循环.显然,像Erlang这样的语言不需要笨拙的循环来解决这个问题,但是使用C(我猜其他程序编程语言也需要,也许?)你必须以这种方式做.

看看我在那里做了什么?;)

正如其他人所说,递归是一种在许多语言中解决问题的完全正常(且有效)的方法.不是直接相关的,但是......对于某些事情来说,递归比循环更容易理解(反过来也是如此)...... fib(n).