`

[练习]erlang编程练习1

 
阅读更多

这边就写点小代码,不求写得很精准能用就好了(跪....

 

统计文件数量:

%%%===============================
%%% @author cc
%%% @description
%%% 查找并统计对应后缀的文件
%%% @end
%%%===============================

-module(seek_file).
-export([seek/1,count/2]).
-define(FLAG,seekfile).

%%程序启动入口,初始化一个监听进程用于统计
seek(Dir) ->  
  Pid=spawn(seek_file,count,[0,[]]),
  case whereis(?FLAG) of
     undefined -> register(?FLAG,Pid);
	 _         -> unregister(?FLAG),register(?FLAG,Pid)
  end,
  seek_inner(Dir,0).

%%搜寻文件的函数  
seek_inner(Dir,No) -> 
   Files=filelib:wildcard(Dir ++ "/*"),
   deal_with(Files,No).
   
%%用于监听的函数   
count(Sum,List) ->
  receive 
    {add,X,File} -> count(Sum+X,[File] ++ List);
	 stop -> io:format("~p~n ~p~n",[Sum,List])
  end.

%%deal_with/2用于对文件进行判断
%%这边用了很多的递归 如果No为0并
%%且列表为空了那么程序就结束了
deal_with([],No) when No/=0 -> ok;

deal_with([],No) -> ?FLAG ! stop;

deal_with([File|Others],No) -> 
  case filelib:is_dir(File) of
     %%间接递归的函数标记为1
     true -> seek_inner(File,1);
	 false -> 
	     case re:run(File,".*\\.java$",[]) of
		    nomatch -> ok;
			{match,_}-> ?FLAG ! {add,1,File}
		  end
   end,
   deal_with(Others,No).
   

    

   输出:

22> c(seek_file).
seek_file.erl:33: Warning: variable 'No' is unused
{ok,seek_file}
23> seek_file:seek("g:/workbench/web").
5
 ["g:/workbench/web/huffman/src/org/cc/mediawork/Huffman.java",
  "g:/workbench/web/huffman/src/org/cc/mediawork/Huffman 2.java",
  "g:/workbench/web/huffman/src/org/cc/mediawork/Huffman - 3.java",
  "g:/workbench/web/huffman/src/org/cc/mediawork/Huffman - .java",
  "g:/workbench/web/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/first/org/apache/jsp/index_jsp.java"]
stop

 

分享到:
评论

相关推荐

    Erlang编程指南

    “即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习和参考资料..., 《Erlang编程指南》每章末尾都提供了练习题,并且由简单的示例贯穿全书。

    Erlang程序设计(第二版)及源码

    本书由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和...第2版全新改写,反应了自第1版面世以来Erlang历经的所有变化,添加了大量针对初学者的内容,并在每章后都附上了练习题。

    Erlang OTP 并发编程实战(高清中文版) pdf

    建议学习实践: ...1. 要坚持实践高性能大并发编程的实践 2. Erlang基础->OTP高并发编程实践PDF->Elixir 3. 认真实践本书中的知识点, 动手练习, 高并发软件实时大容量的服务器开发可打败C++的大团队开发

    erlings:小练习让您习惯于阅读和编写Erlang代码

    Erlings:进行一些小练习,以使您习惯于阅读和编写Erlang代码 来源: : Erlang是一种编程语言,用于构建对高可用性有要求的大规模可扩展软实时系统。 它的一些用途是在电信,银行,电子商务,计算机电话和即时...

    ErlangQuest:通过这组挑战学习 Erlang。 一个认识 Erlang 的交互系统

    二郎任务Erlang Quest 是一个小游戏,您可以在其中解决 Erlang 编程任务,从非常简单的东西开始。 Erlang Quest 是一种练习 Erlang 的方式——在 Erlang 中写作和解决问题。 它不包括 Erlang 语法等方面的教程——...

    programming_erlang:章节练习和笔记

    编程 Erlang:并发世界的软件(练习) 这是我完成的练习集。 我所做的每一章都在一个单独的目录中,例如chapter_1等。我还计划将我在每章中沿途捡起的markdown格式的笔记放在一起。 最终将在本自述文件中找到更重要...

    katas:Elixir,Haskell,Erlang等的编程练习

    卡塔斯已达到此仓库中1000个文件的限制,因此这是一个新的文件,用于处理更多程序难题,katas等。

    erlang_etudes

    erlang_etude 我的《 Erlang练习曲》编程解决方案-http: (代码示例,作者版权所有)。 在尝试解决练习题时,我修改了一些代码示例,而某些代码示例则取自上述网站。

    mkr:µKanren在Lisp风味Erlang中的实现

    它是一种很小的关系编程语言,在Jason Hemann和Daniel P. Friedman的超级有趣的教程认真的科学出版物的定义。我可以运行在合理的策士在练习mkr ? 是的! 您可能需要小心,因为conde实际上交错流,像condi从理由...

    functional-programming:这是KTH提供的函数式和并发编程课程

    最初使用的编程语言是Erlang,但现在我们转向Elixir。讲课将有14堂讲座将讲解功能和并发编程的概念。 我们将使用Elixir作为示例语言,但讲座更侧重于全局。 学习Elixir是您在编程时最好学习的东西。练习题强烈建议...

    Misc:只是一堆小练习来保持头脑敏锐

    只是一堆小练习来保持头脑敏锐。 应该注意的是,截至 2014 年 9 月 28 日,由于我参加了 Martin Odersky 教授的 Coursera Scala 课程,因此统计数据对 XLST 和 Scala 存在偏差。 这可能会一直持续到我完成后,尽管我...

    python基础(十八):函数式、递归调用

    文章目录一、函数式1、函数式简介2、匿名函数与lambda二、递归调用1、递归调用要点透析2、递归调用的两个过程:回溯与递推3、递归经典例题练习(1)嵌套多层的列表,要求打印出所有的元素(2)二分法递归实现 ...

    exercism:锻炼-FP语言练习

    使用功能性编程语言(例如Clojure,Elixir,Elm,Haskell Scala,Lisp,Erlang,Purescript,F#或Scheme)进行运动。 资料夹结构 语言名称锻炼的名字 运动文件夹应包含README.md和源代码。 如果已经有解决方案,只...

    progp-stupid-atm:KTH progp14实验室inet

    #StupidATM由Nick Nyman和Jonas Dahl编写的KTH progp14... 编写例如Go或Erlang旨在处理并行编程范例。 另一方面,Erlang在处理字符串方面不是很擅长,您可能需要在Java中为用户界面编写一个小的前端。 (此练习尚未在

    Y分钟学习X种语言

    在每节后面有问题和习题的编程书籍是很好的学习工具,可以练习你学到的知识,但这样的 书很少。最近出版的《Functional Programming with F#》是一个很优秀的例子,它的每 章后面都有问题习题。 也许几个小时你就能...

Global site tag (gtag.js) - Google Analytics