در این مثال قرار است کارکردن با عبارات شرطی نظیر if تست شود هرچند در ارلنگ در بسیاری از موارد میتوان از آن صرفنظر کرد و با خود توابع و تطابق الگو به این کارکرد رسید. برای این مثال قرار است مبلغ و اسم ایالت پرسیده شود چنانچه نام ایالت WI بود 5.5% درصد مالیات محاسبه شده و مقدار کل برگردد و در غیر اینصورت همان مبلغ اصلی برگشت داده شود. برای چاپ خروجی از if استفاده کردم اما برای محاسبه با استفاده از تطابق الگو تمایز ایجاد کردم. در این مثال برای نخستین بار سعی در مستند سازی کد کردم که در پست مربوطه به آن توضیح مفصل خواهم داد.
%%@author Mahdi Hosseini Moghaddam <m.hoseini.m@gmail.com> %%@doc Exercise 14 from "Exercises for programmers" Book %%@reference from <a href="http://erlang.blog.ir">مثال هایی در ارلنگ</a>, %% 2016 %%@copyright 2018 by Mahdi Hosseini Moghaddam %%@version 0.1 -module(ex14). -export([main/0]). -define(WITAX, 0.055). %@doc This is my main function, It handles the exceptions and runs the program main() -> try run() catch error:_Error -> io:format( "Please Enter only Numeric type~n"); throw:negativeNumber -> io:format( "Please Enter only non-zero positive number~n") end. %@doc This fucntion print out the result, it first calls readData function then calc_Tax to calculate the result run() -> {A, State} = readData(), {At, Taxed} = calc_Tax(A, State), if State =="WI" -> io:fwrite("The subtotal is $~w~n The tax is $~w~n the total is ~.2f~n" ,[A,Taxed,At]); true -> io:fwrite("The total is $~w~n",[At]) end. %@doc This function calculates the tax calc_Tax(A,"WI") -> {A * (1+?WITAX),A * ?WITAX}; calc_Tax(A,_) -> {A,0}. %@doc This function reads the user input the returns the result, it checks for invalid input like negative numbers readData() -> {ok,[A]} = io:fread( "What is the order amount? ","~d"), State = string:strip(io:get_line("What's the state? "),right,$\n), if A =< 0 -> throw(negativeNumber); true -> ok end, {A, State}.