code

code

Elixir does not recognize a varibale and extends it as a function. Why does this happen?

Here is my code:

defmodule HW3A do
    def onepad(int, n \\ 0, list \\ []) do
        case n do
        ^int -> list
        _ -> onepad(int, n + 1, list ++ [:rand.uniform(int)])
        end
    end

    defp string_to_num(string_grahemes, alphabets, cipher_nums, num_list \\ []) do
        string_to_num(tl(string_grahemes), alphabets, tl(cipher_nums), [(Keyword.get(alphabets, hd(string_grahemes) |> String.to_atom)) + hd(cipher_nums) | num_list])
    end

    defp string_to_num([], alphabets, cipher_nums, num_list) do
        num_list
    end


    def cipher(string) do
        numbers = onepad(String.length(string))
        alphabets = Enum.zip([:a,:b,:c,:d,:e,:f,:g,:h,:i,:j,:k,:l,:m,:n,:o,:p,:q,:r,:s,:t,:u,:v,:w,:x,:y,:z], [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26])
        string_num = []

        encrypted_numbers = string_num(String.graphemes(string), alphabets, numbers, num_list)

        IO.inspect(encrypted_numbers)
    end
end

When I call the function I get the following error:

warning: function string_to_num/4 is unused
  practice.exs:113


** (CompileError) practice.exs:127: undefined function num_list/0
    (elixir 1.12.2) src/elixir_locals.erl:114: anonymous fn/3 in :elixir_locals.ensure_no_undefined_local/3
    practice.exs:105: (file)

What am I doing wrong here ? I just want to return the argument.

Thanks in advance.

Most Liked

Jacek

Jacek

Here you call string_num and use num_list as a parameter. Since such a variable does not exist in the scope of the cipher function, the compiler looks for a function but of course it does not exist as well.

Qqwy

Qqwy

TypeCheck Core Team

Can you post the rest of your module? I’m pretty sure that the problem originates elsewhere, as the following compiles (with a bunch of warnings):

defmodule Example do
  defp string_to_num(string_grahemes, alphabets, cipher_nums, num_list \\ []) do
        string_to_num(tl(string_grahemes), alphabets, tl(cipher_nums), [(Keyword.get(alphabets, hd(string_grahemes) |> String.to_atom)) + hd(cipher_nums) | num_list])
  end

  defp string_to_num([], alphabets, cipher_nums, num_list) do
        num_list
  end
end
zwippie

zwippie

Not an exact answer, but you should probably swap the functions (put the last one before the first) because now string_to_num with an empty list as the first argument will be processed by the first function, where I think you would like it to use the second function.

derek

derek

As @zwippie suggests, you need to put the string_to_num/4 with the [] first param first, since if the first param is [], the first clause will match, with [] being assigned to string_grahemes. You should then be getting a compiler warning to that effect.

You should also be getting a compiler warning:

warning: defp string_to_num/4 has multiple clauses and also declares default values. In such cases, the default values should be defined in a header. Instead of:

    def foo(:first_clause, b \\ :default) do ... end
    def foo(:second_clause, b) do ... end

one should write:

    def foo(a, b \\ :default)
    def foo(:first_clause, b) do ... end
    def foo(:second_clause, b) do ... end

Where Next?

Popular in Questions Top

pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod -- where is this set? Thanks.
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
vonH
When I run the Plug and I recompile I wind up having to use Ctrl C to quit iex and start again. Witht the help of rlwrap I can use the cu...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

Other popular topics Top

William
I would like to know that is there any online source for learning Phoenix Framework for building E-Commerce Store? Any advantage on build...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 45766 226
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
chrismccord
This release brings a number of exciting features, including integration with the new Phoenix LiveDashboard and Phoenix LiveView. There h...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list....
New
9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
lucidguppy
I have a super simple question about elixir - how would I take a file like this foo bar baz and output a new file that enumerates th...
New

We're in Beta

About us Mission Statement