Erlang (programming language)/Tutorials: Difference between revisions
imported>Eric Evers |
imported>Eric Evers (Undo revision 100491855 by Eric Evers (Talk)) |
||
Line 1: | Line 1: | ||
{{subpages}} | |||
=Erlang Language Programming Tutorials= | |||
==History== | |||
The erlang language was first written in prolog by Joe Armstrong. Ref:audio interview with Joe Armstrong from (http://www.se-radio.net). Joe is a known fan of prolog and borrowed much syntax from prolog in the design of erlang. This first prolog version of erlang was slow and motivated the creation of a virtual machine. Later an emulator called the BEAM was written in C and is about 200,000 lines of C code. It is thought that erlang is short for "Ericsson Language", due to its place of birth. | |||
==Overview== | ==Overview== | ||
Line 7: | Line 14: | ||
Erlang has been around for 20 years and has a large library of functions available, especially for networking and the web. | Erlang has been around for 20 years and has a large library of functions available, especially for networking and the web. | ||
==Basic Erlang== | |||
:[[/Command Line|Get to know the Command Line]] | |||
:[[/Terms|Terms]] | |||
:[[/Pattern Matching|Pattern Matching]] | |||
:[[/Expressions|Expressions]] | |||
:[[/Functions|Functions]] | |||
:[[/guards|Guards]] | |||
:[[/Modules|Modules]] | |||
:[[/Errors|Errors]] - working with exceptions | |||
:[[/Processes|Processes and Messages]] | |||
:[[/Trap_exit|Trapping Exit Signals]] | |||
:[[/Timeouts|Timeouts]] | |||
:[[/Macros|Macros]] | |||
:[[/Techniques of Recursion|Techniques of Recursion]] | |||
:[[/List Comprehensions|List Comprehensions]] | |||
:[[/List Comments/]] | |||
==Syntax== | |||
Functions are defined by the domain of the arguments and the number of arguemnts. A function ends with a period. A function over a particular domain of values is separated by a semicolon. The arrow shows how a particular function of a particular value or variable maps to an output. | |||
fact(0) -> 1; | |||
fact(N) when is_integer(N) -> | |||
fact(N-1)*N. | |||
:[[Erlang_programming_language/Tutorials/Advanced_syntax|Advanced Syntax]] | |||
==Simple Types== | |||
Basic types in erlang include: | |||
*atom - alice | |||
*integer - 3 | |||
*float - 3.1415 | |||
*pid - a process id number <0.42.0> | |||
*list - [ things in square brackets ] | |||
*tuple - { things in curly braces } | |||
==Advanced Types== | |||
*binary - a binary data block, <<42>> | |||
*function - a function, F = fun(X) -> X*X end. | |||
*port - a path for data to flow to the outside world | |||
*reference - a unique id over all processes | |||
*record - the standard erlang data structure | |||
==Modules== | |||
===Adding/Replacing Modules=== | |||
Erlang is picky about updating or replacing modules of the same name. | |||
You should completely remove the old module code from the directory tree, | |||
not just rename the containing directory. | |||
===Popular Modules=== | |||
:[[Erlang_programming_language/Tutorials/Math|math]] | |||
:[[Erlang_programming_language/Tutorials/gb_sets|gb_sets]] | |||
:[[Erlang_programming_language/Tutorials/Lists|lists]] | |||
:[[Erlang_programming_language/Tutorials/regexp|regexp: Regular Expressions]] | |||
===Nonstandard Modules=== | |||
:[[Erlang_programming_language/Tutorials/eunit|Eunit]] Unit Testing Module | |||
==Object Oriented Programming with erlang== | |||
:[[Erlang_programming_language/Tutorials/erlangOOP|Objects with erlang]] | |||
==Functional Programming with erlang== | |||
:[[Erlang_programming_language/Tutorials/Folding|Fun with folding]] | |||
:[[Erlang_programming_language/Tutorials/Iterator|Iterator]] | |||
:[[Erlang_programming_language/Tutorials/Simplify|Simplify Numeric Types]] (auto-demotion of numerical types) | |||
==Example programs== | |||
:[[Erlang_programming_language/Tutorials/Hello|Hello World (Serial)]] | |||
:[[Erlang_programming_language/Tutorials/Tree_Hello|Hello World (parallel) ]] | |||
:[[Erlang_programming_language/Tutorials/Linda_Sieve|Prime Sieve with Linda]] | |||
:[[Erlang_programming_language/Tutorials/Agents|Autonomous Agents in Erlang]] -- def: [[Autonomous Agent]]. | |||
==Advanced OTP== | |||
===Databases=== | |||
:[[Erlang_programming_language/Tutorials/ETS|ETS programming]] | |||
:[[Erlang_programming_language/Tutorials/DETS|DETS programming]] | |||
:[[Erlang_programming_language/Tutorials/Mnesia|Mnesia database]] | |||
====Mnesia==== | |||
==Advanced Erlang== | |||
:[[Erlang_programming_language/Tutorials/Yecc|Making parsers with yecc]] | |||
:[[Erlang_programming_language/Tutorials/Evaluation|Evaluation]] | |||
==Projects using erlang== | |||
*CouchDB - a scalable database for Apache | |||
*Wings3D - a 3-D editor | |||
==References== | |||
[http://www.erlang.org/doc/man/| 1 - Erlang Man Pages at Erlang,org] |
Revision as of 15:04, 21 May 2009
Erlang Language Programming Tutorials
History
The erlang language was first written in prolog by Joe Armstrong. Ref:audio interview with Joe Armstrong from (http://www.se-radio.net). Joe is a known fan of prolog and borrowed much syntax from prolog in the design of erlang. This first prolog version of erlang was slow and motivated the creation of a virtual machine. Later an emulator called the BEAM was written in C and is about 200,000 lines of C code. It is thought that erlang is short for "Ericsson Language", due to its place of birth.
Overview
Erlang is language created to do parallel programming with message passing.
Erlang is a functional language. A functional language is one that is based on lambda calculus. In lambda calculus variables have single assignment and behave like mathematical functions and functions are stateless. The advantages of referential transparency(single assignment) are many. Single assignment makes debugging easier(Joe Armstrong http://www.se-radio.net). Statelessness makes hot code swapping easy in erlang(Joe Armstrong). Referential transparency makes editing and code transformation easier(via find and replace). Functional languages have the advantage that syntax and semantics are unified. This unification makes it easier for code to modify itself safely, which facilitates meta-programming. Added benefits of functional programming include the ability to prove things like the correctness and equivalence between programs (see Functional Programming [1])
Erlang has been around for 20 years and has a large library of functions available, especially for networking and the web.
Basic Erlang
- Get to know the Command Line
- Terms
- Pattern Matching
- Expressions
- Functions
- Guards
- Modules
- Errors - working with exceptions
- Processes and Messages
- Trapping Exit Signals
- Timeouts
- Macros
- Techniques of Recursion
- List Comprehensions
- List Comments
Syntax
Functions are defined by the domain of the arguments and the number of arguemnts. A function ends with a period. A function over a particular domain of values is separated by a semicolon. The arrow shows how a particular function of a particular value or variable maps to an output.
fact(0) -> 1; fact(N) when is_integer(N) -> fact(N-1)*N.
Simple Types
Basic types in erlang include:
- atom - alice
- integer - 3
- float - 3.1415
- pid - a process id number <0.42.0>
- list - [ things in square brackets ]
- tuple - { things in curly braces }
Advanced Types
- binary - a binary data block, <<42>>
- function - a function, F = fun(X) -> X*X end.
- port - a path for data to flow to the outside world
- reference - a unique id over all processes
- record - the standard erlang data structure
Modules
Adding/Replacing Modules
Erlang is picky about updating or replacing modules of the same name. You should completely remove the old module code from the directory tree, not just rename the containing directory.
Popular Modules
Nonstandard Modules
- Eunit Unit Testing Module
Object Oriented Programming with erlang
Functional Programming with erlang
- Fun with folding
- Iterator
- Simplify Numeric Types (auto-demotion of numerical types)
Example programs
- Hello World (Serial)
- Hello World (parallel)
- Prime Sieve with Linda
- Autonomous Agents in Erlang -- def: Autonomous Agent.
Advanced OTP
Databases
Mnesia
Advanced Erlang
Projects using erlang
- CouchDB - a scalable database for Apache
- Wings3D - a 3-D editor