در این مثال قیمت سه آیتم از کاربر از ورودی بهمراه تعداد هر کدام را دریافت میکنیم و قیمت نهایی را با در نظر گرفتن 5.5% مالیات محاسبه میکنیم که بسیار ساده است. در این مثال قسمت دریافت اطلاعات، چاپ خروجی و محاسبات را از هم جدا کردم و ضمنا تابع محابسه بصورت بازگشتی تعریف شده است.
-module(ex10). -export([main/0]). -define(TAX, 0.55). 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. run() -> L = readItems(), [Sub,Taxed,Total] = calc_tax(L), io:fwrite( "Subtotal: $~w~nTax: $~w~nTotal: $~w~n", [Sub,Taxed,Total]). calc_tax(L) -> calc_tax(L,0). calc_tax([],Total) -> [Total, Total*?TAX,(1+?TAX)*Total]; calc_tax([{P,Q}|T],Total) -> calc_tax(T,Total+(P*Q)). readItems() -> {ok,[P1]} = io:fread( "Enter the price of item 1: ","~d"), {ok,[Q1]} = io:fread( "Enter the quantity of item 1: ","~d"), {ok,[P2]} = io:fread( "Enter the price of item 2: ","~d"), {ok,[Q2]} = io:fread( "Enter the quantity of item 2: ","~d"), {ok,[P3]} = io:fread( "Enter the price of item 3: ","~d"), {ok,[Q3]} = io:fread( "Enter the quantity of item 3: ","~d"), if P1 =< 0 orelse Q1 =< 0 orelse P2 =< 0 orelse Q2 =< 0 orelse P3 =< 0 orelse Q3 =< 0 -> throw(negativeNumber); true -> ok end, [{P1,Q1},{P2,Q2},{P3,Q3}].