Start programming erlang.
This commit is contained in:
parent
bb0620f3aa
commit
ba841f127c
|
@ -4,6 +4,7 @@
|
||||||
*.o
|
*.o
|
||||||
*.pdf
|
*.pdf
|
||||||
.d
|
.d
|
||||||
|
*.beam
|
||||||
|
|
||||||
# ignore build systems
|
# ignore build systems
|
||||||
.ninja_deps
|
.ninja_deps
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
-module(afile_client).
|
||||||
|
-compile([debug_info]).
|
||||||
|
-export([ls/1, get_file/2, put_file/3]).
|
||||||
|
|
||||||
|
ls(Server) ->
|
||||||
|
Server ! {self(), list_dir},
|
||||||
|
receive
|
||||||
|
{Server, FileList} ->
|
||||||
|
FileList
|
||||||
|
end.
|
||||||
|
|
||||||
|
get_file(Server, File) ->
|
||||||
|
Server ! {self(), {get_file, File}},
|
||||||
|
receive
|
||||||
|
{Server, Content} ->
|
||||||
|
Content
|
||||||
|
end.
|
||||||
|
|
||||||
|
put_file(Server, File, Contents) ->
|
||||||
|
Server ! {self(), {put_file, File, Contents}},
|
||||||
|
receive
|
||||||
|
{Server, Result} ->
|
||||||
|
Result
|
||||||
|
end.
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
-module(afile_server).
|
||||||
|
-compile([debug_info]).
|
||||||
|
-export([start/1, loop/1]).
|
||||||
|
|
||||||
|
start(Dir) ->
|
||||||
|
spawn(afile_server, loop, [Dir]).
|
||||||
|
|
||||||
|
%% Three significant points to observer about this code:
|
||||||
|
%%
|
||||||
|
%% + Who to reply to: all the received messages contain
|
||||||
|
%% the variable Client - the PID of the sender.
|
||||||
|
%% + Use of self(): the PID of the server.
|
||||||
|
%% + Pattern matching to select the message.
|
||||||
|
loop(Dir) ->
|
||||||
|
receive
|
||||||
|
{Client, list_dir} ->
|
||||||
|
Client ! {self(), file:list_dir(Dir)};
|
||||||
|
{Client, {get_file, File}} ->
|
||||||
|
Full = filename:join(Dir, File),
|
||||||
|
Client ! {self(), file:read_file(Full)};
|
||||||
|
{Client, {put_file, File, Contents}} ->
|
||||||
|
Full = filename:join(Dir, File),
|
||||||
|
Client ! {self(), file:write_file(Full, Contents)},
|
||||||
|
{Client, ping} ->
|
||||||
|
Client ! {self(), pong};
|
||||||
|
{Client, _} ->
|
||||||
|
Client ! {self(), unrecognised_message};
|
||||||
|
{_} ->
|
||||||
|
io:format("unhandled message")
|
||||||
|
end,
|
||||||
|
loop(Dir).
|
||||||
|
|
||||||
|
%% Notes:
|
||||||
|
%% + function names are always lowercased
|
||||||
|
%% + universal receiver: receive X -> X end.
|
||||||
|
%% + erlang: use processes to structure the solutions to our problems.
|
||||||
|
%% + *ATOMS*ARE*LOWER*CASED*
|
|
@ -0,0 +1,11 @@
|
||||||
|
-module(geometry).
|
||||||
|
-export([area/1]).
|
||||||
|
|
||||||
|
area({rectangle, Width, Height}) ->
|
||||||
|
Width * Height;
|
||||||
|
area({circle, Radius}) ->
|
||||||
|
3.14159 * Radius * Radius;
|
||||||
|
area({square, Side}) ->
|
||||||
|
Side * Side.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
-module(heads).
|
||||||
|
-export([len/1]).
|
||||||
|
|
||||||
|
alen([], Count) ->
|
||||||
|
Count;
|
||||||
|
|
||||||
|
alen([_|T], Count) ->
|
||||||
|
alen(T, Count+1).
|
||||||
|
|
||||||
|
len([_|T]) ->
|
||||||
|
alen(T, 1);
|
||||||
|
|
||||||
|
len([]) ->
|
||||||
|
0.
|
|
@ -0,0 +1,5 @@
|
||||||
|
-module(hello).
|
||||||
|
-export([start/0]).
|
||||||
|
|
||||||
|
start() ->
|
||||||
|
io:format("Goodbye, joe.~n").
|
|
@ -0,0 +1,4 @@
|
||||||
|
-module(shop).
|
||||||
|
-export([cost/1]).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue