Ответ 1
Это потому, что переменные, происходящие на LHS генераторов, X и Y здесь, всегда являются новыми несвязанными переменными, локальными для понимания. Это означает, что они не являются теми же переменными, что и X и Y в начале тройки, и поэтому нет никакого неявного теста на равенство. Это похоже на funs, где все переменные, встречающиеся в голове удовольствия, являются новыми переменными, локальными для удовольствия.
Это отличается от большинства остальных erlang, поэтому компилятор не только предупреждает, что X и Y в голове не используются, но также и то, что X и Y в понимании затеняют другие переменные. Они также не используются в понимании.
Легкий способ получить то, что вам нужно:
[ Result || Result = {X1,Y1,_} <- Self, X =:= X1, Y =:= Y1 ]