`
argan
  • 浏览: 129599 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Erlang 基础学习 4 Advanced Sequential Programming

阅读更多
Day 4 Advanced Sequential Programming

• BIF Build-In Functions,是在虚拟机里实现的,用erlang很难实现的功能,例如tuple_to_list,time等
• Binaries 中的整数只能在0-255
• term_to_binary,binary_to_term,list_to_binary
• 位操作
• M = <<X:3, Y:7, Z:6>><3 y:7 z:6=""><br>• X占三个bit,Y7个,Z6个<br><br>&lt;&lt;&gt;&gt;<br>&lt;&lt;E1, E2, ..., En&gt;&gt;<e1 e2 en=""><br><br>Ei = Value |<br>      Value:Size |<br>      Value/TypeSpecifierList |<br>      Value:Size/TypeSpecifierList<br><br>• binary 数据只能表达8的整数倍的bits,因为是用byte来存储的<br>•  16#abc,表示16进制的abc,相当于10#2748.<br>• 16#abc = 2748 . <br>• erlang 支持2 到36进制<br>• 例如 4#213123123 = 161499.<br><br>• {ok,Bin}=file:read_file("/path/to/the/file").  读文件<br><br>BIF apply : 相当于java中的反射调用<br>• apply(Mod, Func, [Arg1, Arg2, ..., ArgN])<br>• 相当于 直接调用 Mod:Func(Arg1, Arg2, ..., ArgN)<br>• 要尽量避免使用<br><br><b>Module Attributes</b><br><br>• predefined attributes:<br>• -module(modname).<br>• -import(Mod, [Name1/Arity1, Name2/Arity2,...]).<br>• -export([Name1/Arity1, Name2/Arity2, ...]).<br>• -compile(Options).  例如:-compile(export_all).<br>• -vsn(Virsion).没有其他含义,一般用来分析或者文档<br>• user defined attributes:<br>-module(attrs).<br>-vsn(1234).<br>-author({joe,armstrong}).<br>-purpose("example of attributes" ).<br>-export([fac/1]).<br>fac(1) -&gt; 1;<br>fac(N) -&gt; N * fac(N-1).<br><br>• 可以用Modname:module_info().来获取所有的attributes<br><br><b>Block Expressions</b><br><br>begin<br>    Expr1,<br>    ...,<br>    ExprN<br>end<br><br>• 用在只允许一个表达式,但是又需要有很多代码的地方<br>• 他的值是最后一个表达式的值<br><br><b>include</b><br><br>• include的文件都是以.hrl结尾的<br>• include(FileName). 使用相对路径或者绝对路径<br>• include_lib(Name).<br><br><b>Macro </b><br>• 定义:<br>-define(Constant, Replacement).<br>-define(Func(Var1, Var2,.., Var), Replacement).<br><br>• 使用?MacroName 引用<br>• 预定义的<br>• ?FILE当前文件<br>• ?MODULE当前module<br>• ?LINE当前行<br>• -undef(Macro).<br>• -ifdef(Macro).<br>• -ifndef(Macro).<br>• -else.<br>• -endif.<br>• <br><br><b>Numbers</b><br>• 整数,整数的大小没有限制(受内存大小限制,废话)<br>• 整数的三种写法:<br>• 1. 一般的,123,1231231,-34234<br>• 2. n进制,最大到36进制,例如 0 -65 2#010001110 -8#377 16#fe34 16#FE34 36#wow<br>• 3. $+字符,例如 $a 表示97,就是a的ascii码,$\n表示10<br>• 浮点数,例如 1.0 3.14159 -2.3e+6 23.56E-27,内部表示都是IEEE 754 64-bit<br>• 浮点数的表达区间是 −10^323 to 10^308<br><br><b>Process Dictionary</b><br><br>• 每个erlang进程都有一个私有的dictionary,可以保存一些属性<br>• @spec put(Key, Value) -&gt; OldValue.<br>• @spec get(Key) -&gt; Value.<br>• @spec get() -&gt; [{Key,Value}].<br>• @spec get_keys(Value) -&gt; [Key].<br>• @spec erase(Key) -&gt; Value.<br>• @spec erase() -&gt; [{Key,Value}].<br>• 一般不推荐使用,因为会破坏Varible not Vary的原则,如果使用,可以存放一些不会变动的内容。<br><br><br><b>其他内容</b><br>• erlang 的源代码都是使用iso-8859-1 编码的,erlang的字符串都是integer数组,因此内部没有编码问题<br>• 注释,使用 %,只有行注释,没有块注释<br>• 没有特别的boolean类型,true和false<br>• epp, Erlang preprocessor,处理macross和include,可以用compile:file(M, [’P’]). 来编译M.erl,然后把preprocess后的内容方到M.P里<br>• function引用,fun mod_name:fun_name/Arity,如果在同一个module,mod_name可以省略<br>• list操作的++ 和 --,注意--是将第一个出现的值去掉<br>• 在 erlang shell里,可以用c(Module,{}).来编译module,可以传一些参数进去<br>• andalso/orelse 和and / or的区别主要在于懒惰,能不执行的时候就不执行,and/or的表达式都是一定会执行的<br>• number &lt; atom &lt; reference &lt; fun &lt; port &lt; pid &lt; tuple &lt; list &lt; binary<br>• =:= =/= 和 == /=的区别,一个是绝对一样,另一个是差不多相等<br>• 使用下划线开头的变量,如果未被使用,编译器不会警告<br>• 可以在作pattern match的时候将match的内容命名,供后面使用,可以提高效率(避免重新生成内容),例如:<br><br>func1([{tag, {one, A}=Z1, B}=Z2|T]) -&gt;<br>   ..,.<br>   ... f(..., Z2, ...),<br>   ... g(..., Z1, ...),<br>   ...<br><br></e1></3>
分享到:
评论

相关推荐

    erlang programming

    通过对以上知识点的学习和实践,开发者可以利用Erlang的强大功能来创建高可靠性、高并发的分布式系统。 erlang-book-part1.pdf可能涵盖其中的一些或全部内容,为读者提供全面的Erlang编程指导。

    Erlang Programming 导读.pdf

    ### Erlang Programming 导读.pdf 知识点详解 #### 一、Erlang简介与特点 **Erlang**是一种通用的、并发性强的、容错性高的编程语言,适用于构建分布式系统的软件。它最初由爱立信公司开发,用于解决电信系统中的...

    Introducing Erlang: Getting Started in Functional Programming

    Introducing Erlang: Getting Started in Functional Programming by Simon St. Laurent English | 6 Mar. 2017 | ASIN: B06XHSP5SH | 212 Pages | AZW3 | 1.85 MB If you’re new to Erlang, its functional style...

    Programming Erlang.pdf

    从目录可以看出,本书首先介绍了Erlang的基础概念和安装指南,随后逐步深入到更高级的主题和技术细节。通过这种方式,读者可以从零开始学习Erlang,并逐步掌握其核心功能和编程技巧。 ### 7. 特别准备 文件中多次...

    erlang学习相关资料

    Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.

    《Programming Erlang》

    通过阅读《Programming Erlang》,读者可以深入了解这些特性,并学习如何运用它们来解决实际问题。书中的例子涵盖了从基本的函数式编程概念到复杂的并发系统设计,对于任何想要涉足Erlang或对函数式编程感兴趣的人来...

    Erlang编程语言The Erlang Programming Language

    这是《 Erlang编程语言》的上一页,我们正在处理中,将那里的所有书籍都转换为新页面。 请再次检查此页面!!!

    Pragmatic.Programming.Erlang.2nd.Edition

    ### 关于《Pragmatic Programming ...总之,《Pragmatic Programming Erlang 第二版》是一本非常值得推荐的Erlang学习资料,无论你是刚刚接触Erlang的新手还是想要深入了解Erlang的资深开发者,都能从中获益良多。

    programming erlang src code

    《编程Erlang》是Joe ...通过对《编程Erlang》源码的学习,我们可以深入了解Erlang的精髓,掌握如何构建高效、健壮的并发系统,以及如何利用其特性解决实际问题。源码阅读不仅是理论知识的深化,更是实践技能的提升。

    Erlang语音学习资料汇总

    资源名称:Erlang语音学习资料汇总资源目录:【】Erlang程序设计【】[ManningPublications]ErlangandOTPinAction【】[NoStarchPress]LearnYouSomeErlangforGreatGood!ABeginner'sGuide【】[O'ReillyMedia]...

    Introducing Erlang Getting Started in Functional Programming(2nd) epub

    Introducing Erlang Getting Started in Functional Programming(2nd) 英文epub 第2版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    erlang学习资料

    理解函数式编程的核心概念,如不可变数据、高阶函数和模式匹配,是学习Erlang的基础。 2. **过程与并发**:Erlang中的并发是通过轻量级进程(Lightweight Processes, LWP)实现的,每个进程有自己的堆栈和消息队列...

    erlang中文基础教程

    "Erlang中文基础教程" Erlang 编程语言是一种功能强大且灵活的编程语言,它提供了一个交互式的 shell 环境,允许用户在其中编写和运行代码。 Erlang Shell 是一个命令行交互环境,类似于 UNIX 和 LINUX 系统的...

    Concurrent Programming in ERLANG (P1-90)

    在开始学习并发之前,理解Erlang中的顺序编程是非常重要的基础。这部分介绍了基本的编程概念,如变量、数据类型、流程控制等。例如,在Erlang中,所有变量都是只读的,这意味着一旦一个变量被赋值后就不能改变其值,...

    erlang 连接学习例子

    在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们分别代表了一个服务器进程和客户端进程,展示了Erlang中进程间的通信机制。 `server.erl` 文件通常包含一个持续运行的...

Global site tag (gtag.js) - Google Analytics