博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
恶狼传说[Erlang的有趣旅程]
阅读量:5114 次
发布时间:2019-06-13

本文共 991 字,大约阅读时间需要 3 分钟。

郁闷,cnblogs编辑器还没有erlang高亮.

开始,Erlang的fibonacci

新建一个erltest.erl,内有

-module(erltest).  %需和文件名同名 -export([fib/1]).  %外部可调用的函数,所以编译后外部可erltest:fib这么调用,fib/1的 /1 表示函数有1个参数,同名不同参erlang是允许的 fb(1) -> [1,0];    %当碰到fb(1)模式时,直接返回[1,0] fb(2) -> [1,1,0];  %同上 fb(N)when N >2 -> %当调用fb(N{N > 2})时   Z = fb(N-1),  %把前个结果赋给Z,比如如果是fb(3),那么将展开变成Z = fb(2)-> Z = [1,1,0]
  [X,Y|_] = Z,  %模式匹配list的前两个值,忽略Tail值,_表示ignore.如果当前是fb(3),那么X -> 1,Y ->1
  [X+Y|Z].      %前两个值相加,推入作为list的Head,如果当前是fb(3),那么[X+Y|Z] -> [2,1,1,0],因为Z是[1,1,0] fib(N) -> lists:reverse(fb(N)).  %反转,暴露fib作为模块的调用函数

初探erlang函数式编程,代码量不见得少,但是编程思维却和顺序式编程有天壤之别,变量非'变'量,代码解析核心是模式匹配...很有意思。

赶紧编译执行,erl进入erl shell.可cd('路径')转至erltest.erl所在目录。

1> c(erltest). {ok,erltest} 2> erltest:fib(10). [0,1,1,2,3,5,8,13,21,34,55]

bingo!

改进版/2012.03.12

fib(N)                  -> fib(N,[1,1]).  fib(N,L)  when N > 2    -> [X,Y|_] = L ,fib(N-1,[X+Y|L]); fib(_,L)                -> lists:reverse(L).

转载于:https://www.cnblogs.com/funlake/archive/2011/09/14/2176640.html

你可能感兴趣的文章
Jzoj4757 树上摩托
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
第一个Java Web程序
查看>>
树状数组_一维
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
嵌入式软件设计第8次实验报告
查看>>
算法和数据结构(三)
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
Repeater + Resources 列表 [原创][分享]
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>
【转】 FPGA设计的四种常用思想与技巧
查看>>
EntityFrameWork 实现实体类和DBContext分离在不同类库
查看>>