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学习的初步笔记,可能涵盖了基本语法、并发模型以及一些实用工具的使用。 【标签】"源码"和"工具"提示我们,这篇笔记可能包括了...
【Erlang程序设计(第2版)】是由Erlang之父Joe Armstrong撰写的一本经典著作,专注于介绍Erlang编程语言在并发、分布式和容错系统中的应用。本书适用于初学者和有一定经验的Erlang程序员。作者在书中讨论了如何利用...
### Erlang学习笔记:深入解析Erlang编程与系统管理 #### 1. Erlang编程基础与资源 在深入探讨Erlang编程之前,我们首先需要了解一些基础资源和学习资料。Erlang官方网站([www.erlang.org](http://www.erlang.org...
通过对这些知识点的理解,我们可以深入到Erlang程序设计的精髓,从而更好地学习和利用Erlang编写出高效、可靠的系统。在`code`这个文件中,你可以找到实际的源码,通过阅读和分析,将理论知识与实践相结合,提升对...
### Erlang语言程序设计 #### 一、Erlang语言简介与重要性 Erlang是一种功能强大且灵活的编程语言,它最初由爱立信公司开发,旨在为电信系统提供高并发、分布式处理能力。随着时间的发展,Erlang不仅在电信领域...
Joe的那篇erlang论文 Programming Erlang + 源码包 Erlang Programming Concurrent Programming in Erlang efficiecy guide 资源齐全.希望能帮到你.
Erlang是一种为构建大规模并发系统而设计的函数式编程语言。它的核心特性包括轻量级进程(processes)、消息传递和故障隔离。Erlang以其容错性和高可用性著称,广泛应用于电信、分布式系统和实时计算领域。 压缩包...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信...总的来说,Erlang的学习涉及函数式编程思想、并发处理、分布式系统设计等多个方面,深入学习并实践这些知识点,将使你具备开发高效、可靠的并发应用程序的能力。
资源名称:Erlang语音学习资料汇总资源目录:【】Erlang程序设计【】[ManningPublications]ErlangandOTPinAction【】[NoStarchPress]LearnYouSomeErlangforGreatGood!ABeginner'sGuide【】[O'ReillyMedia]...
### Erlang多核编程入门知识点总结 #### 一、Erlang多核编程背景与重要性 - **多核时代的来临**:随着技术的发展,单个芯片内部的...通过学习和掌握Erlang的多核编程技巧,开发者可以更加从容地面对多核时代的挑战。
这份"Erlang游戏程序学习完整PDF手册"是一份全面介绍Erlang在游戏开发中应用的学习资料,包含了Erlang的基础知识、并发原理以及在游戏开发中的实践案例。 Erlang语言的设计理念源自于Ericsson公司为解决电信系统中...
总之,Erlang设计指南将引导你深入理解并发编程的世界,学习如何利用Erlang构建高效、容错的系统。通过阅读"Pragmatic Programming Erlang",你可以掌握Erlang的关键概念,如进程、消息传递、模式匹配、OTP和分布式...
### Erlang程序设计知识点概述 #### 1. Erlang基础语法与函数定义 - **模块定义**: 在Erlang中,所有的代码都包含在模块之中。例如:`-module(tut).` 定义了一个名为`tut`的模块。 - **函数定义与导出**: 函数定义...
用于erlang学习资源 一些基本的语言
本文是一篇关于Redis全套学习笔记的文章,主要介绍了Redis的基础知识、数据结构、持久化、集群、高可用、性能优化等方面的内容。通过本文的学习,读者可以全面掌握Redis的使用和应用,提高自己的技术水平和实践能力...
Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson于1986年开发,主要用于构建高可用性...《Erlang程序设计》这本书,无论是中文版还是英文版,都为学习者提供了深入了解和掌握Erlang的宝贵资源。
### Erlang 入门学习经典资料解析 #### Erlang 的神秘与起源 Erlang,作为一门相对小众但极具特色的编程语言,自问世以来便伴随着一种神秘的气息。这种神秘感不仅源于它独特的编程范式——函数式编程,还在于其...
Erlang作为一种专为构建高并发、容错性强的应用程序而设计的语言,在与其他语言(如C语言)的集成方面具有独特的优势。本文将详细介绍Erlang与C语言之间接口的具体实现方式及其工作原理。 #### 二、Erlang与C语言...
Simon St. Laurent的《Introducing Erlang》这本书深入浅出地介绍了这些概念,是学习Erlang的理想起点。通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。