Erlang---用ETS和DETS存储数据

我的列表mylists中的reverse方法要在ETS表中使用,

-module(mylists).
-export([reverse/1]).
-export([concate/1]).
-export([flatten/1]).

reverse([],Ret) -> Ret;
reverse([H|T],Ret) ->
       Temp = [H|Ret],
       reverse(T,Temp).

reverse(L) -> reverse(L,[]).

concate([],L) -> L;
concate([H|T],L) ->
       Temp=[H|L],
       concate(T,Temp).


concate([]) -> [];
concate([H|T]) ->
 concate(reverse(H),concate(T)).
flatten(L) ->  Temp = concate(L), 
       case Temp == L of
              true -> Temp;
              false -> flatten(Temp)
       end.
创建一个ETS表,三个字母组合迭代函数,创建一些表,计算创建表所需的时间和访问表所需的时间,获胜者是.....
-module(lib_trigrams).
-export([for_each_trigram_in_the_english_language/2,timer_tests/0,time_lookup_ets_set/2,lookup_all_ets/2,time_lookup_module_sets/0,lookup_all_set/2]).
-import(mylists,[reverse/1]). 
-export([scan_word_list/3,get_next_word/2,scan_trigrams/3,make_ets_ordered_set/0,make_a_set/2,make_ets_set/0,make_mod_set/0]).
for_each_trigram_in_the_english_language(F,A0)->
   {ok,Bin0}=file:read_file("354984si.ngl.gz"),
   Bin=zlib:gunzip(Bin0),
   scan_word_list(binary_to_list(Bin),F,A0).
scan_word_list([],_,A)->
    A;
scan_word_list(L,F,A)->
    {Word,L1}=get_next_word(L,[]),
	A1=scan_trigrams([$\s|Word],F,A),
	scan_word_list(L1,F,A1).
get_next_word([$\r,$\n|T],L)->{reverse([$\s|L]),T};
get_next_word([H|T],L)->get_next_word(t,[H|L]).
scan_trigrams([X,Y,Z],F,A)->F([X,Y,Z],A);
scan_trigrams([X,Y,Z|T],F,A)->
	A1=F([X,Y,Z],F,A),
	scan_trigrams([Y,Z|T],F,A1);
scan_trigrams(_,_,A)->A.
make_ets_ordered_set()->make_a_set(ordered_set,"trigramOS.tab").
make_ets_set()->make_a_set(set,"trigrams.tab").

make_a_set(Type,FileName)->
	Tab = ets:new(table,[Type]),
	F=fun(Str,_)->ets:insert(Tab,{list_to_binary(Str)}) end,
	for_each_trigram_in_the_english_language(F,0),
	ets:tab2file(Tab,FileName),
	Size=ets:info(Tab,size),
	ets:delete(Tab),
	Size.
make_mod_set()->
	D=sets:new(),
	F=fun(Str,Set)->sets:add_element(list_to_binary(Str),Set) end,
	D1=for_each_trigram_in_the_english_language(F,D),
	file:write_file("trigrams.set",[term_to_binary(D1)]).
timer_tests()->
    time_lookup_ets_set("Ets Ordered Set","trigramsOS.tab"),
	time_lookup_ets_set("Ets set","trigramsS.tab"),
	time_lookup_module_sets().
time_lookup_ets_set(Type,File)->
    {ok,Tab}=ets:file2tab(File),
	L=ets:tab2list(Tab),
	Size=length(L),
	{M,_}=timer:tc(?MODULE,lookup_all_ets,[Tab,L]),
	io:format("~s lookup=p micro seconds~n",[Type,M/Size]),
	ets:delete(Tab).
lookup_all_ets(Tab,L)->
    lists:foreach(fun({K})->ets:lookup(Tab,K) end,L).

time_lookup_module_sets()->
    {ok,Bin} = file:read_file("trigram.set"),
	Set=binary_to_term(Bin),
	Keys=sets:to_list(Set),
	Size=length(Keys),
	{M,_}=timer:tc(?MODULE,lookup_all_set,[Set,Keys]),
	io:format("Module set lookup=~p seconds ~n",[M/Size]).
lookup_all_set(Set,L)->
    lists:foreach(fun(Key)->sets:is_element(Key,Set) end,L).

在这里插入图片描述
Erlang程序设计-----【瑞典】Joe Armstrong著 牛化成译—【M】北京:中国工信出版社和人民邮电出版社

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: erlang-22.3-1.el7.x86_64.rpm是Erlang编程语言版本22.3的RPM软件包,适用于CentOS和Red Hat Enterprise Linux (RHEL)操作系统的64位版本。Erlang是一种基于函数式编程的并发编程语言,由瑞典爱立信公司开发。它被广泛应用于构建高可靠性、分布式、可扩展的软件系统,尤其适合用于构建通信和实时系统。 这个RPM软件包是Erlang版本22.3的二进制安装程序。RPM是一种用于Linux发行版的软件包管理系统,它可以方便地安装、更新和卸载软件包。x86_64表示该软件包适用于64位的x86处理器架构。 要安装erlang-22.3-1.el7.x86_64.rpm,可以使用以下命令: ``` $ sudo yum install erlang-22.3-1.el7.x86_64.rpm ``` 该命令将自动解析并安装erlang软件包及其依赖项。安装完成后,您可以在系统上使用Erlang编程语言来开发和运行应用程序。 Erlang的特点包括强大的并发性、容错机制和热代码升级功能。它通过基于消息传递的并发模型来实现高度并发和分布式计算。因此,它经常用于构建需要高可用性和实时性的应用,例如电信系统、金融交易系统和多人在线游戏等。 总结来说,erlang-22.3-1.el7.x86_64.rpm是Erlang编程语言版本22.3的RPM软件包,它为CentOS和RHEL操作系统提供了64位的安装程序,让用户可以方便地在这些系统上安装和使用Erlang编程语言。 ### 回答2: erlang-22.3-1.el7.x86_64.rpm 是一种用于Linux操作系统的RPM软件包,主要用于安装和管理Erlang编程语言的运行环境。 Erlang是一种面向并发和分布式应用的编程语言,它具有高可用性、容错性和可伸缩性。Erlang编译器将Erlang代码转换为字节码,并在Erlang虚拟机(BEAM)上运行。BEAM虚拟机负责执行字节码并管理并发和分布式运行环境。 erlang-22.3-1.el7.x86_64.rpm 是Erlang运行环境的一个版本,适用于64位的x86_64架构,并且兼容CentOS和Red Hat Enterprise Linux 7 (EL7)版本。.rpm是一种RPM软件包的扩展名,RPM是一种常用的软件包管理工具,它能够自动处理软件的安装、升级和卸载。 要安装 erlang-22.3-1.el7.x86_64.rpm 软件包,可以使用RPM软件包管理器进行操作。在终端中使用适当的命令,例如 "rpm -i erlang-22.3-1.el7.x86_64.rpm",即可将软件包安装到系统中。 安装完成后,系统就会拥有Erlang编程语言的运行环境,开发人员可以使用Erlang语言来编写并发和分布式应用程序。Erlang提供了丰富的库和工具,使开发过程更加高效和便捷。 总结来说,erlang-22.3-1.el7.x86_64.rpm 是一个Erlang编程语言的运行环境软件包,适用于64位的x86_64架构,可在CentOS和Red Hat Enterprise Linux 7上安装和使用。安装该软件包后,就可以使用Erlang来编写并发和分布式应用。 ### 回答3: erlang-22.3-1.el7.x86_64.rpm是指为CentOS 7操作系统提供的Erlang编程语言的软件包。Erlang是一种函数式编程语言,经过设计用于支持分布式、并发和容错系统。它由瑞典爱立信公司开发,并广泛应用于电信、金融和互联网行业。 这个软件包的版本是22.3,是指Erlang的主要版本。每个主要版本都带来了新功能、改进和修复旧版本的问题。这个版本是针对x86_64架构的,适用于64位的CentOS 7操作系统。 .rpm是一种Linux软件包管理器使用的包格式扩展名,用于安装、升级、配置和删除软件包。使用.rpm文件可以方便地在CentOS操作系统中安装、升级和管理Erlang软件。 通过安装这个rpm软件包,您可以在CentOS 7系统中使用Erlang编程语言来开发和运行分布式和并发系统。Erlang提供了许多库和工具,使得开发复杂系统更加容易。它的并发模型和容错机制使得编写可靠的分布式应用程序变得更加简单。 总之,erlang-22.3-1.el7.x86_64.rpm是适用于CentOS 7系统的Erlang编程语言软件包。通过安装和使用这个软件包,您可以在CentOS 7上进行Erlang编程,并享受到Erlang在分布式、并发和容错方面的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值