`

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

    erlang 程序设计 源码

    通过对这些知识点的理解,我们可以深入到Erlang程序设计的精髓,从而更好地学习和利用Erlang编写出高效、可靠的系统。在`code`这个文件中,你可以找到实际的源码,通过阅读和分析,将理论知识与实践相结合,提升对...

    erlang 语言程序设计

    ### Erlang语言程序设计 #### 一、Erlang语言简介与重要性 Erlang是一种功能强大且灵活的编程语言,它最初由爱立信公司开发,旨在为电信系统提供高并发、分布式处理能力。随着时间的发展,Erlang不仅在电信领域...

    erlang学习相关资料

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

    Scala、Groovy++、Stackless Python、Erlang 学习笔记及分享

    Erlang是一种为构建大规模并发系统而设计的函数式编程语言。它的核心特性包括轻量级进程(processes)、消息传递和故障隔离。Erlang以其容错性和高可用性著称,广泛应用于电信、分布式系统和实时计算领域。 压缩包...

    erlang学习资料

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信...总的来说,Erlang的学习涉及函数式编程思想、并发处理、分布式系统设计等多个方面,深入学习并实践这些知识点,将使你具备开发高效、可靠的并发应用程序的能力。

    Erlang语音学习资料汇总

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

    Erlang学习资料

    ### Erlang多核编程入门知识点总结 #### 一、Erlang多核编程背景与重要性 - **多核时代的来临**:随着技术的发展,单个芯片内部的...通过学习和掌握Erlang的多核编程技巧,开发者可以更加从容地面对多核时代的挑战。

    Erlang游戏程序学习完整PDF手册

    这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了Erlang的基础知识、并发原理以及在游戏开发中的实践案例。 Erlang语言的设计理念源自于Ericsson公司为解决电信系统中...

    erlang 设计指南

    总之,Erlang设计指南将引导你深入理解并发编程的世界,学习如何利用Erlang构建高效、容错的系统。通过阅读"Pragmatic Programming Erlang",你可以掌握Erlang的关键概念,如进程、消息传递、模式匹配、OTP和分布式...

    erlang 笔记

    ### Erlang程序设计知识点概述 #### 1. Erlang基础语法与函数定义 - **模块定义**: 在Erlang中,所有的代码都包含在模块之中。例如:`-module(tut).` 定义了一个名为`tut`的模块。 - **函数定义与导出**: 函数定义...

    Erlang学习资源

    用于erlang学习资源 一些基本的语言

    Redis全套学习笔记 (带章节目录) 完整版pdf

    本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...

    Erlang 程序设计 中文 + 英文 pdf

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性...《Erlang程序设计》这本书,无论是中文版还是英文版,都为学习者提供了深入了解和掌握Erlang的宝贵资源。

    erlang入门学习经典资料(很不错)

    ### Erlang 入门学习经典资料解析 #### Erlang 的神秘与起源 Erlang,作为一门相对小众但极具特色的编程语言,自问世以来便伴随着一种神秘的气息。这种神秘感不仅源于它独特的编程范式——函数式编程,还在于其...

    erlang -c语言程序接口.pdf

    Erlang作为一种专为构建高并发、容错性强的应用程序而设计的语言,在与其他语言(如C语言)的集成方面具有独特的优势。本文将详细介绍Erlang与C语言之间接口的具体实现方式及其工作原理。 #### 二、Erlang与C语言...

    erlang编程 Introducing Erlang

    Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

Global site tag (gtag.js) - Google Analytics