imported>Eric Evers |
imported>Eric Evers |
Line 4: |
Line 4: |
|
| |
|
| ==Syntax== | | ==Syntax== |
|
| |
| ===Hello World===
| |
|
| |
| -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''<ref name="K&R"/>.
| |
|
| |
| <code>-module(hello)</code> tells the [[compiler]] to create a new module(library) called hello. The code tells us the file name for this code: hello.erl.
| |
|
| |
| <code>-export([start/0]). </code> exports a function named start with 0 arguments to the world outside of this module called hello.
| |
|
| |
| <code> start() -> </code> tells the compiler that there is a [[function]] named start() with no arguments.
| |
|
| |
| <code>io:format("Hello, world!\n").</code> will make the program output <code>Hello, world!</code> and a new line (<code>\n</code>) on the screen.
| |
|
| |
| ===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".
| |
|
| |
|
| ==See also== | | ==See also== |