przemyxe0p
Hi,
I am wondering why my solution wil not work
1. source: Perfect Numbers in Elixir on Exercism
2. solution attempt:
@spec classify(number :: integer) :: {:ok, atom} | {:error, String.t()}
def classify(number) do
case aliquot_sum(number) do
number -> ok(:perfect)
x when x > number -> ok(:abundant)
x when x < number -> ok(:deficient)
end
end
defp ok(item), do: {:ok, item}
defp aliquot_sum(number), do: get_divisors(number) |> Enum.sum()
defp get_divisors(number, divisor \\ 1, acc \\ [])
defp get_divisors(number, divisor, acc) when divisor > div(number,2), do: acc
defp get_divisors(number, divisor, acc) when rem(number, divisor) == 0,
do: get_divisors(number, divisor + 1, [divisor | acc])
defp get_divisors(number, divisor, acc), do: get_divisors(number, divisor + 1, acc)
end
3. question:
Complier is saying:
this clause cannot match because a previous clause at line 15
always matchesElixir
perfect_numbers.ex(15, 7): related
and
variable "number" is unused (there is a variable with the same name in the
context, use the pin operator (^) to match on it or prefix this variable
with underscore if it is not meant to be used)Elixir
Why is that, why it cannot match with number passed to function?
Trending in Questions
Hi all,
I’m working on a Phoenix project where I need to make external HTTP requests and I’m trying to choose between Req and HTTPoison....
New
I’m very new to Elixir, so sorry if this is a silly question:
I am wondering what happens to the mailbox of a process when the machine i...
New
How do I tell Hologram not to escape HTML when substituting into templates?
{Textile.render(@product.long_description)}
escapes the HTM...
New
Background
When trying to execute mix release on a Windows 11 machine for a Phoenix project I get the following error:
* assembling mark...
New
I’d like to create a file with 600 permissions (rw-------), but there’s a race condition if I create it and then change the permissions. ...
New
Is there a way to import record definitions in the iex shell for pretty printing (similar to the rr command in the erl shell)? This woul...
New
When I use Mix.install with a git dependency, using git@github.com:... how do I change the SSH identity used?
I’ve got two Github accoun...
New
Other Trending Topics
Hey there,
I haven’t seen a list of useful Elixir specific skills for the popular AI tools yet so I’m starting one here with my first.
...
New
Hi everyone :waving_hand:
I wanted to share something I’ve been building — NowBlind, a random chat app designed to help people discover ...
New
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
(I just needed to vent somewhere and LinkedIn is full of hope, or hype, I’m not sure which exactly)
AI dream has many faces, but general...
New
Localize is the next generation localisation library for Elixir. Think of it as ex_cldr version 3.0. The first version will be released ...
New
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #library
- #deployment
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #elixirconf
- #channels
- #exunit
- #code-sync
- #discussion
- #podcasts
- #javascript
- #onsite
- #dialyzer
- #docker
- #authentication
- #ai
- #elixirconf-us
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #blog-post
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #graphql
- #genstage
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #elixirconf-eu
- #processes
- #security
- #api
- #forms
- #performance











Showing Posts 1 to 10- Show Best Posts
- Show All (oldest first)
- Show All (newest first)
krasenyp
The first case clause matches any number. The clauses’ order matters.
przemyxe0p
But I used the same variable name in function clause, so I would expect that It would match against it
krasenyp
Oh, I get you now. You can use the pin operator
^number.kokolegorille
No, your logic is wrong and number might not be what You think…
As soon as there is a match, the rest of the case is discarded
the number in the case is not the number parameter, it is a new number
You probably should write this with cond
przemyxe0p
After adding ^ operator it’s right why should I use cond? What is more “idiomatic” whatever this “idiomatic” word mean?
kokolegorille
Because it’s very rare to use ^number in the case
Yet, You can do as You like
krasenyp
In my experience it’s very rare to use
condbut it’s still valid.przemyxe0p
Last question, i cannot find explanatio why this works that way. Do you have explanation or link to resources?
krasenyp
sodapopcan
People have a weird aversion to
condfor some reason that I don’t really understand. Doing pure boolean checks is exactly what it exists for. Thecaseversion is essentially the same with unnecessary extra syntax. Usingcondgives added information that indeed all clauses are boolean checks. It’s only rare because this doesn’t come up as often in Elixir, but it certainly does come up!