Erlang列表:keyfind/3未按预期工作

Erlang列表:keyfind/3未按预期工作,erlang,erlang-shell,Erlang,Erlang Shell,下面的代码片段有什么问题 > A = [{X, 1} || X <- lists:seq(1,5)]. > lists:keyfind({3,1}, 1, A). false >A=[{X,1}| | X列表:keyfind({3,1},1,A)。 假的 为什么函数返回false?理想情况下,它应该返回{3,1}。列表:keyfind/3通过比较每个元组的Nth值与给定值来搜索元组列表。您的代码正在搜索第一个元素为{3,1}的元组,它在列表中不存在。要搜索第一个元素为3的元

下面的代码片段有什么问题

> A = [{X, 1} || X <- lists:seq(1,5)].
> lists:keyfind({3,1}, 1, A).
false
>A=[{X,1}| | X列表:keyfind({3,1},1,A)。
假的

为什么函数返回false?理想情况下,它应该返回{3,1}。

列表:keyfind/3
通过比较每个元组的
N
th值与给定值来搜索元组列表。您的代码正在搜索第一个元素为
{3,1}的元组
,它在列表中不存在。要搜索第一个元素为
3
的元组,可以执行
列表:keyfind(3,1,A)。


为什么您希望它返回
{3,1}
列表:keyfind/3
只搜索列表中每个元组的第n个(在本例中为1)项,而不是全部。您的意思是执行
列表:keyfind(3,1,A).
?我想我没有正确理解这个函数的第二个参数。这个
N
是什么意思?如果我想匹配
{3,1}
,而不是只匹配
3
1> A = [{X, 1} || X <- lists:seq(1,5)].
[{1,1},{2,1},{3,1},{4,1},{5,1}]
2> lists:keyfind({3,1}, 1, A).
false
3> lists:keyfind(3, 1, A).
{3,1}
4> lists:member({3,1}, A).
true