Erlang like many other functional languages includes a robust pattern matching system. A pattern(left side) is usually matched against a phrase (right side).
Following are the instances where we can use pattern matching:
-module(main).-export([main/0]).promote({car, sedan}) -> "This car is sedan";promote({car, hatchback}) -> "This car is hatchback";promote({car, suv}) -> "This car is suv";promote({car, _}) -> "This car does not belong to any category".main() ->io:format("While determining the value of a function~n", []),io:format("~p~n", [promote({car, suv})]),io:format("~p~n", [promote({car, sedan})]),io:format("~p~n", [promote({car, hatchback})]),io:format("~p~n", [promote({car, sports})]).
Lines 4–7: We define different functions that return different values based on the parameters sent to them.
Lines 9–14: This is the main function that tests the functions above by sending different arguments.
-module(main).-export([main/0]).determine_car(Arg) when is_tuple(Arg) ->case Arg of{car, sedan} -> "This car is sedan";{car, hatchback} -> "This car is hatchback";{car, suv} -> "This car is suv";{car, _} -> "This car does not belong to any category";_ -> "This is not a car"end.main() ->io:format("In a case-of block~n", []),io:format("~p~n", [determine_car({car, sedan})]),io:format("~p~n", [determine_car({car, sports})]),io:format("~p~n", [determine_car({bike})]).
Lines 4–11: This function includes a case
statement tackling different types of input parameters.
Lines 13–17: This is the main function which calls the determine_car
function with different arguments.
-module(main).-export([main/0]).is_multipleOf3(Number) ->Type = try Number rem 3 of0 when is_number(Number) -> true;1 when is_number(Number) -> false;2 when is_number(Number) -> falsecatch_ErrType:_Err -> "Its not a number"end,io:format("Is ~p multiple of 3? ~p~n", [Number, Type]).main() ->io:format("In the form of a try expression~n", []),is_multipleOf3(6),is_multipleOf3(8),is_multipleOf3(b).
Lines 4–12: This function includes a try
statement.
Lines 14–18: The main function which calls the is_multipleOf3
function with different arguments.
-module(main).-export([main/0]).-compile([export_all]).postman_service() ->receive{send, {From, To, _Content} = Email} ->io:format("~n~s Sending Email to ~s : ~s~n~n", [From, To, _Content]),self() ! {rcv, Email},postman_service();{rcv, {To, From, Content} = _Email} ->io:format("~s got an Email: ~n~s ~nRegards, ~n~s~n", [From, Content, To]),postman_service();stop ->io:format("~nClosing the Postman connection ~n")end.main() ->io:format("When capturing the incoming messages to a process in a receive block~n", []),ProcessID = spawn(?MODULE, postman_service, []),ProcessID ! {send, {"Jerry", "Tom", "Hello, i hope you are doing good."}},timer:sleep(100),ProcessID ! stop.
Lines 5–16: We use the receive
statement to send and receive an email.
Lines 18–23: The main function that initiates the process of postman_service
and then uses ProcessID
to send a function call in order to send an email from Jerry to Tom.
=
operator-module(main).-export([main/0]).headOfList(List) ->[Head | _] = List,io:format("Head of the list is: ~p~n", [Head]).main() ->io:format("When using the = operator ~n", []),headOfList([100, 200, 300]).
Lines 4–6: We use this function, which includes a =
operator, in order to send the head of the list.
Lines 8–10: We call the headOfList
function.