imported>Eric Evers |
imported>Eric Evers |
Line 30: |
Line 30: |
|
| |
|
| [[Erlang_programming_language/Tutorials/Tree_Hello|Parallel Hello]] | | [[Erlang_programming_language/Tutorials/Tree_Hello|Parallel Hello]] |
|
| |
| ====Parallel Hello World====
| |
| <pre>
| |
| -module(tree_hello). % 1
| |
| -export([start/0, speak/1]). % 2
| |
| % 3
| |
| start() -> % 4
| |
| Pid1 = spawn( tree_hello, speak,[ 1 ]), % 5
| |
| Pid2 = spawn( tree_hello, speak,[ 2 ]), % 6
| |
| Pid1 ! {hello, world}, % 7
| |
| Pid2 ! {hello, world}, % 8
| |
| done. % 9
| |
| % 10
| |
| speak(N) -> % 11
| |
| receive % 12
| |
| {hello, world} -> % 13
| |
| io:format("Hello, world! ~w \n", [N]) % 14
| |
| end. % 15
| |
|
| |
|
| |
| ==========================================================================
| |
|
| |
| output
| |
| --------------------
| |
| tree_hello:start().
| |
| hello world! 1
| |
| hello world! 2
| |
| done
| |
| </pre>
| |
| ====Analysis of the example====
| |
| Here is a simple hello world in the parallel spirit of erlang. The program, par_hello, will create 3 processes, one manager process called "start( )" and 2 worker processes called speak(1) and speak(2) in a tree like relationship. Start( ) creates speak(1) and speak(2), then start( ) sends a message to each worker. The message is {hello, world}. Each worker process responds by printing out "hello world". All three are running simultaneously when line 7 starts.
| |
|
| |
| Lines 1 to 4: see serial "hello world".
| |
| Line 5 spawns a process called speak giving it one argument with the value 1.
| |
| Line 5 also creates a variable Pid1 and gives it the processes id number of speak(1).
| |
| Line 6 spawns a process called speak giving it one argument with the value 2.
| |
| Line 6 also creates a variable Pid2 and gives it the process id number of speak(2).
| |
| Line 7 uses the Pid1(process id number of speak(1) to send a message to speak(1).
| |
| Line 8 uses the Pid2(process id number of speak(2) to send a message to speak(2).
| |
| Line 9 "done" is an arbitrary atom that finishes the function start( ).
| |
| Line 10 is a call to print formated text from the input/output(io) module(library).
| |
| Line 11 starts the function speak(N).
| |
| Line 12 starts to listen for a message.
| |
| Line 13 lists the message that is received
| |
| Line 14 shows what happens when the message in 13 is received.
| |
| Line 14 prints out "hello world 1" if N is one or "hello world 2" if N is 2
| |
|
| |
| Note: bang, ! in erlang means "send the following message".
| |
|
| |
|
| ===Prime Sieve (parallel with linda type coordination)=== | | ===Prime Sieve (parallel with linda type coordination)=== |
Erlang Language Programming Tutorials
Overview
Simple Types
Advanced Types
Examples
Hello World (serial)
Code Example
-module(hello).
-export([start/0]).
start() ->
io:format("Hello, world!\n").
Analysis of the example
The Hello World program (see above) appears in many programming languages books and articles as a cursory introduction into a language's syntax. The first hello world program was introduced in the book The C Programming Language[1].
-module(hello)
tells the compiler to create a new module(library) called hello. The code tells us the file name for this code: hello.erl.
-export([start/0]).
exports a function named start with 0 arguments to the world outside of this module called hello.
start() ->
tells the compiler that there is a function named start() with no arguments.
io:format("Hello, world!\n").
will make the program output Hello, world!
and a new line (\n
) on the screen.
Hello World (parallel)
Parallel Hello
Prime Sieve (parallel with linda type coordination)
Prime Sieve with Linda
Autonomous Agents
Autonomous Agents in Erlang
See definition of Autonomous Agent.
Advanced OTP
ETS
ETS programming
Mimsia
References
1 - Erlang Man Pages at Erlang,org
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs named K&R