Erlang高阶函数——递归
来源:互联网 发布:室内定位技术 知乎 编辑:程序博客网 时间:2024/06/07 22:31
说明
Erlang 高阶函数(匿名函数)有一大堆资料,不再赘述,这里主要说以下高阶函数递归式。
高阶函数递归用法
高阶函数实现尾递归有两种方式:
- 1、将高阶函数自身作为参数传入,并在内部调用
- 2、通过fun进行类似普通函数的定义
1、作为参数传入
参考资料: (转)Erlang匿名函数的递归
写普通函数的时候函数名确定(是原子),因此可以在函数内部调用自身,从而实现尾递归。但高阶函数不同,高阶函数在定义出来之前是未知的。所以通常情况下都是在定义时多传一个参数,在使用的时候将已经定义的函数自身传入。
示例代码:
Fun = fun (F, [], Total) -> Total; (F, [H|T], Total) -> F(F, T, H+Total) end.
2、类似普通函数进行定义
这是群里的朋友交流的时候 @冰川
提出来的,在此之前还真不知道有这种用法。
曾经想过可能会有,但再想到这种用法和Erlang的一贯做法不搭,就自我否定了。有没有是一回事儿,是否求证是另一回事儿,现在看来真是惭愧。
示例代码:
F = fun Test([H | T], Total) -> Test(T, H + Total); Test([], Total) -> Total end.
注:上面的用法怎么看都是面向对象,当然跟函数指针的用法也很像
执行结果:
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]Eshell V9.0 (abort with ^G)1> F = fun Test([H | T], Total) -> Test(T, H + Total); Test([], Total) -> Total end. #Fun<erl_eval.36.99386804>2> F([1,2,3,4,5,6,7,8], 0).363>
附:
OTP 20.0开始,不再支持命令 -smp disable
关闭 smp
功能 ,而是改用 +S
。
- 1、不再支持命令
-smp disable
- 2、
-smp enable|auto
仍然可以使用 - 3、使用
+S
控制数量
+S用法参考:
http://erlang.org/doc/man/erl.html
[Erlang 0035] Erlang SMP
本文由 qingchuwudi 原创/整理,除非另有声明,本作品采用知识共享署名 3.0 中国大陆许可协议进行许可。
阅读全文
0 0
- Erlang高阶函数——递归
- Erlang函数递归调用模式
- Erlang匿名函数及函数的高阶应用
- Erlang程序示例(2):高阶函数 fun
- haskell 递归和高阶函数
- erlang递归
- Erlang学习笔记(3) -- 高阶函数 与 抽象流程控制
- python大作战之递归和高阶函数
- 递归函数——头递归和尾递归
- Erlang手册re模块翻译(一) ——compile函数
- erlang递归和尾递归
- erlang 尾递归
- Erlang尾递归
- Erlang 尾递归
- Scala学习——高阶函数
- python学习——高阶函数
- Python——高阶函数
- Scala学习——高阶函数
- mysql5.7.16绿色版安装
- 五、集合之LinkedHashMap
- Django 的web开发遇到Exception Value: no such table: django_session的解决
- Zookeeper
- keras 模型用于预测时的注意事项
- Erlang高阶函数——递归
- 36. Valid Sudoku
- 如何用chrome调试android应用
- R语言自动提取新闻摘要的简单实现
- H5基础知识第十一课时(className属性)
- Java POI Excel的导入
- 项目中加入redis
- js数组排序
- Python---字符串的内置方法