I am attempting to pass a list into a function and I am just now learning erlang. So I am new. I get this error in my shell when I attempt to build my erl file.
exception error: no case clause matching [{atom,{3,9},lists}]
in function erl_parse:build_attribute/2 (erl_parse.yrl, line 1395)
in call from erl_parse:yeccpars2_654/7 (erl_parse.yrl, line 127)
in call from erl_parse:yeccpars0/5 (/daily_build/otp_src/bootstrap/lib/parsetools/include/yeccpre.hrl, line 57)
in call from epp:parse_file/1 (epp.erl, line 364)
in call from epp:parse_file/1 (epp.erl, line 366)
in call from epp:parse_file/2 (epp.erl, line 337)
in call from compile:do_parse_module/2 (compile.erl, line 1037)
in call from compile:parse_module/2 (compile.erl, line 1011)
Here is my code that is causing it.
It is in my for function, the rest of the code is just test work as I am practicing.
% hello world program
-module(helloworld).
-import(lists).
-import(io,[fwrite/1]).
-export([start/0,greet/2,for/3]).
greet(male, Name) ->
io:format("Hello, Mr. ~s!\n", [Name]);
greet(female, Name) ->
io:format("Hello, Mrs. ~s!\n", [Name]);
greet(_, Name) ->
io:format("Hello, ~s!\n", [Name]).
for(Nums <- [H|T], Idx, Target) ->
Val = lists:nth(Idx, Nums),
S = if Val == Target -> Idx;
Idx >= len(Nums) -> -1;
true -> for(Nums, Idx + 1, Target);
end,
S.
start() ->
fwrite("Hello, world!\n").
Also, I am curious that is actually going to return recursively.
The problem is this line:
As noted in this answer, the one-argument form of the
-importdirective was removed in Erlang R16B (released in 2013). These days-importdirectives require two arguments, the module name and a list of functions to import, like the one on the line below:In general, importing functions is discouraged in Erlang. It is often clearer to include the module name every time you're calling a function. For example, when reading the
startfunction:the call to
fwritelooks like a local function call, and it's only by looking at the-importdirective that you realise that it's actually a call toio:fwrite.So I would recommend removing both
-importdirectives, and changing thestartfunction to callio:fwriteexplicitly, like this: