I run the following anonymous function and variables in the interpreter, and get wrongly so a true statement, but why is that, and what do I need to change:
Lst = [1,2,3].
Y = 52.
lists:any(fun(Y) -> lists:member(Y, Lst) end, Lst).
I run the following anonymous function and variables in the interpreter, and get wrongly so a true statement, but why is that, and what do I need to change:
Lst = [1,2,3].
Y = 52.
lists:any(fun(Y) -> lists:member(Y, Lst) end, Lst).
This is because the Y in the argument list of the fun shadows the outer definition of Y. It therefore checks if any list element is a member of the list, which is always true.
You don't actually need lists:any here; you can call lists:member directly, without lists:any:
> lists:member(Y, Lst).
false
The equivalent using lists:any would be:
> lists:any(fun(X) -> X =:= Y end, Lst).
false
Here, the argument is X, so we can access Y from outside the fun.