`

erlang学习笔记(顺序程序设计)

 
阅读更多

See Also http://www.erlang.org/course/sequential_programming.html

Numbers

Integers

Floats

Atoms

Tuples

Lists

Variables

Complex Data Structures

Pattern Matching

Function Calls

The Module System

Built in Functions(BIFs)

Function syntax

An example of function evaluation

Examples of Guards

Traversing Lists

Lists and Accumulators

Shell commands

Special Functions

Special Forms

 

Numbers数字

Integers
10
-234
16#AB10F
2#110111010
$A
Floats
17.368
-56.654 
12.34E-10.
* B#Val 表示B进制数字
* $Char 获取Char字符的Ascii码

 

Atoms元子

abcef
start_with_a_lower_case_letter
'Blanks can be quoted'
'Anything inside quotes \n\012'
*任意长度字符串
*atom里面支持任意字符

 

Tuples数组-{}

{123, bcd}
{123, def, abc}
{person, 'Joe', 'Armstrong'}
{abc, {def, 123}, jkl}
{}
*存储固定数量的一组数据
*数组长度可任意指定

 

Lists可变数组-[]

[123, xyz]
[123, def, abc]
[{person, 'Joe', 'Armstrong'},
{person, 'Robert', 'Virding'},
{person, 'Mike', 'Williams'}
]
"abcdefghi"
表示 - [97,98,99,100,101,102,103,104,105]
""
表示空数组 - []
*存储可变元素
*长度动态调整

 

Variables变量

Abc
A_long_variable_name
AnObjectOrientatedVariableName

*首字母大写
*用于存储数据
*只可赋值一次,一旦设置后不能改变

 

Complex Data Structuresz自定义数据结构

[{{person,'Joe', 'Armstrong'},
{telephoneNumber, [3,5,9,7]},
{shoeSize, 42},
{pets, [{cat, tubby},{cat, tiger}]},
{children,[{thomas, 5},{claire,1}]}},
{{person,'Mike','Williams'},
{shoeSize,41},
{likes,[boats, beer]},
...

*可以自定义数据结构
*不需要声明内存申请释放
*可以包含赋值了的变量

 

Pattern Matching模式匹配

A = 10
Succeeds - binds A to 10

{B, C, D} = {10, foo, bar}
Succeeds - binds B to 10, C to foo and D 
to bar

{A, A, B} = {abc, abc, foo}
Succeeds - binds A to abc, B to foo
{A, A, B} = {abc, def, 123}
Fails
[A,B,C] = [1,2,3] 
Succeeds - binds A to 1, B to 2, C to 3
[A,B,C,D] = [1,2,3]
Fails
Pattern Matching (Cont)
[A,B|C] = [1,2,3,4,5,6,7]
Succeeds - binds A = 1, B = 2,
C = [3,4,5,6,7]
[H|T] = [1,2,3,4]
Succeeds - binds H = 1, T = [2,3,4]
[H|T] = [abc]
Succeeds - binds H = abc, T = []
[H|T] = []
Fails
{A,_, [B|_],{B}} = {abc,23,[22,x],{22}}
Succeeds - binds A = abc, B = 22

* 字符"_"表示匿名变量,不会使用此变量,忽略不关心的值

Function Calls

module:func(Arg1, Arg2, ... Argn)
func(Arg1, Arg2, .. Argn)
*Arg1 ... Argn是erlang数据结构
*函数名和模块名必须要atom元子
*函数可以不包含输入参数
*函数定义在模块内
*函数在模块外调用时需要被export导出

 

Module System

-module(demo).
-export([double/1]).
double(X) ->
times(X, 2).
times(X, N) ->
X * N.
*double函数可以在模块外调用,times函数只能在模块内调用
*double/1表示传入一个参数的double函数(double/1和double/2是两个不同函数)

 

Starting the system

 

unix> erl
Eshell V2.0
1> c(demo).
double/1 times/2 module_info/0
compilation_succeeded
2> demo:double(25).
50
3> demo:times(4,3).
** undefined function:demo:times[4,3] **
** exited: {undef,{demo,times,[4,3]}} **
4> 10 + 25.
35
5> 
*c(File) 指令会编译File.erl文件
*1>,2>是shell提示符

 

Built In Functions(BIFs)

date()
time()
length([1,2,3,4,5])
size({a,b,c})
atom_to_list(an_atom)
list_to_tuple([1,2,3,4])
integer_to_list(2234)
tuple_to_list({})
*这些函数内置在erlang自带的模块中

 

Function Syntax

func(Pattern1, Pattern2, ...) ->
... ;
func(Pattern1, Pattern2, ...) ->
... ;
...
func(Pattern1, Pattern2, ...) ->
... .
*分句是被顺序扫描直至匹配
*匹配后给每个变量赋值
*变量是局部的,自动申请释放

Functions(cont)

-module(mathStuff).
-export([area/1]).

area({square, Side}) ->
Side * Side;

area({circle,Radius}) ->
3.14 * Radius * Radius;

area({triangle,A,B,C}) ->
S = (A+B+C)/2,
math:sqrt(S*(S-A)*(S-B)*(S-C));

area(Other) ->
{invalid_object,Other}.

 

Guarded Function Clauses

-module(mathStuff).
-export([factorial/1,errcase/1]).

factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N-1).

%upper is not the same as below
errcase(0) -> 1;
errcase(N) -> N * errcase(N-1).

 

Examples of Guards

number(X)	- X is a number
integer(X)	- X is an integer
float(X)	- X is a float
atom(X)	 - X is an atom
tuple(X)	- X is a tuple
list(X)	 - X is a list
length(X) == 3	- X is a list of length 3
size(X) == 2	- X is a tuple of size 2.
X > Y + Z	- X is > Y + Z
X == Y	 - X is equal to Y
X =:= Y	 - X is exactly equal to Y
                 (i.e. 1 == 1.0 succeeds but 
  1 =:= 1.0 fails)

*guard中的变量必须被赋值

 

 

Special Functions

apply(Mod, Func, Args)

传入Func函数,对Args参数进行处理

1> apply( lists1,min_max,[[4,1,7,3,9,10]]).

{1, 10}

 

 

Special Forms

case lists:member(a, X) of
true ->
... ;
false -> 
...
end,
...
if
integer(X) -> ... ;
tuple(X) -> ... 
end,
...

 

Shell Commands

h() - 打印20条历史命令

b() - 查看所有变量赋值情况

f() - 取消所有变量赋值

f(Var) - 取消指定变量的赋值(注:这个功能只能用在shell命令中,不能用在函数体)

e(n) - 执行历史记录中第n个

分享到:
评论

相关推荐

    erlang 学习笔记1

    【描述】虽然描述中没有具体的信息,但我们可以假设这是一个博主分享的关于Erlang学习的初步笔记,可能涵盖了基本语法、并发模型以及一些实用工具的使用。 【标签】"源码"和"工具"提示我们,这篇笔记可能包括了...

    Erlang程序设计(第2版)1

    【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...

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

    书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。...

    erlang程序设计与入门

    **Erlang程序设计与入门** Erlang是一种并发、函数式编程语言,主要用于构建分布式、高可用性、容错性强的系统。它的设计灵感来源于电信行业的需求,由瑞典爱立信公司于1986年开发。Erlang以其独特的并发模型、轻量...

    Erlang程序设计 第2版

    Erlang程序设计 第2版 Erlang程序设计 第2版Erlang程序设计 第2版

    Erlang程序设计,包含完整目录和全套源码

    这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性源于其轻量级进程模型,每个进程都有自己的内存空间,进程间通信通过消息传递实现,这种设计降低了并发执行...

    erlang学习笔记

    ### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...

    Erlang程序设计及源码

    本资源包含了一本Erlang程序设计的入门经典书籍及其配套源码,适合初学者深入理解Erlang编程。 1. **Erlang简介** Erlang以其强大的并发处理能力而闻名,它采用了轻量级进程模型,使得在单个系统中可以同时运行...

    Erlang程序设计中文版

    通过阅读《Erlang程序设计中文版》并结合提供的完整书签,学习者可以逐步构建起对Erlang语言的全面理解,从而在实际工作中有效地运用Erlang解决复杂的问题。无论你是初学者还是有经验的开发者,这本书都能为你提供...

    [Erlang程序设计]源代码

    **Erlang程序设计源代码详解** Erlang是一种面向并发、函数式编程语言,尤其在分布式系统和高可用性领域表现出色。本资源包含了《Erlang程序设计》一书的所有实例代码,旨在帮助读者深入理解Erlang语言的核心特性和...

    Erlang并发编程,Erlang程序设计,Erlang中文手册

    Erlang并发编程,Erlang程序设计,Erlang中文手册。 学习erlang的好资料。  Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此...

    erlang程序设计相关例子程序

    通过对这些文件名的分析,我们可以看出这些Erlang程序涵盖了并发处理、进程通信、异常处理、服务器设计、数据处理和测试等多个方面,体现了Erlang在构建分布式系统中的强大功能。学习并理解这些示例,对于深入掌握...

    erlang程序设计2

    erlang发明者写的书。erlang/otp一种高可靠性的平台。

    erlang程序设计(第二版)中文pdf

    erlang 程序设计(第二版) 中文 pdf

    Erlang程序设计及源代码打包

    学习Erlang不仅限于阅读《Erlang程序设计》这本书,还可以通过以下途径进一步提升: 1. **官方文档**:Erlang的官方文档提供了完整的语言参考和教程,是深入学习的重要资源。 2. **开源项目**:研究Erlang的开源...

    erlang程序设计

    在深入探讨Erlang程序设计之前,我们先来了解一下Erlang的基础概念。 1. 函数式编程:Erlang是一种纯函数式编程语言,这意味着函数不具有副作用,它们仅根据输入产生输出,不改变外部状态。这种特性使得代码更容易...

    [Erlang程序设计].中文版.pdf

    Joe Armstrong [Erlang程序设计].中文版 一本不错的Erlang学习书籍~!

Global site tag (gtag.js) - Google Analytics