[erlang-questions] Newbie Question about io:format

847 views
Skip to first unread message

Hakim Fajardo

unread,
Feb 21, 2017, 4:38:10 AM2/21/17
to erlang-q...@erlang.org
First, thank you because this is a great resource. 

Second, I started writing basic programs every day to improve my Erlang coding. I wrote a simple program that calculates the average of a list of numbers. But I keep getting this error about io:format.


prices([]) ->
[],
io:format("List is empty ~n");

%% determine number of items in the list to calculate average%%

prices(L) when is_list(L) ->
Size = length(L),
Sum1 = lists:sum(L),
Av1 = Sum1 / Size,
io:format("The average equals ~n", Av1).

Then..

Eshell V8.2  (abort with ^G)
1> L = [1,2,2,2,3,3,4].
[1,2,2,2,3,3,4]

2> c(standev).
{ok,standev}

3> standev:prices(L).
** exception error: bad argument
     in function  io:format/3
        called as io:format(<0.50.0>,"The average equals ~n",2.4285714285714284)


Why am I getting '**exception error:'?

Thank you, I hope this isn't too newbie a question.



Dmytro Lytovchenko

unread,
Feb 21, 2017, 4:42:24 AM2/21/17
to Hakim Fajardo, Erlang/OTP discussions
Because Erlang has no functions with variable amount of arguments (like for example in printf C/C++), args to io:format are passed as a list. So correct way to call it is:

io:format("Bla ~p~n", [Av1]).

Where ~p is to print any value, also there are more ways to format a value, consult the documentation page at http://erlang.org/doc/man/io.html#fwrite-1

_______________________________________________
erlang-questions mailing list
erlang-q...@erlang.org
http://erlang.org/mailman/listinfo/erlang-questions


Richard A. O'Keefe

unread,
Feb 21, 2017, 7:17:59 PM2/21/17
to erlang-q...@erlang.org
On 21/02/17 10:15 PM, Hakim Fajardo wrote:
(simplified):

prices([]) ->
io:format("List is empty~n");
prices(L) when is_list(L) ->
io:format("The average equals ~n", lists:sum(L)/length(L)).
^^^^^^^^^^^^^^^^^^^^^^^

% man io
format(Format, Data) -> ok
Data = [term()]

The second argument of io:format/2 should be a list.

What part of the format says to expect a number?
What part of the format says how to print a number?

Hakim Fajardo

unread,
Feb 22, 2017, 2:14:25 PM2/22/17
to Dmytro Lytovchenko, Erlang/OTP discussions
Thank you,

I understand now.

Hakim Fajardo

unread,
Feb 22, 2017, 2:14:52 PM2/22/17
to Richard A. O'Keefe, Erlang/OTP discussions
Thank you! I see now. 
Reply all
Reply to author
Forward
0 new messages