List 从列表中的元组中提取匹配元素

List 从列表中的元组中提取匹配元素,list,erlang,tuples,matching,List,Erlang,Tuples,Matching,Title说明了一切,所以我基本上向函数传递了一个列表, L=[{“苏格拉底”、“福克斯1、福克斯2”}、{“孔子”、“福克斯2、福克斯3”}、{“亚里士多德”、“福克斯3、福克斯4”}、{“荷马”、“福克斯4、福克斯5”}、{“柏拉图”、“福克斯5、福克斯1”}] 我传递要匹配的值和这个列表,但当我找到匹配的值时,我只想传递列表的第二个元素,例如,如果我传递“苏格拉底”,我应该返回“fork1,fork2” 这里是我的两个与之相关的功能 whichFork({Name},[X|Xs]) -&

Title说明了一切,所以我基本上向函数传递了一个列表, L=[{“苏格拉底”、“福克斯1、福克斯2”}、{“孔子”、“福克斯2、福克斯3”}、{“亚里士多德”、“福克斯3、福克斯4”}、{“荷马”、“福克斯4、福克斯5”}、{“柏拉图”、“福克斯5、福克斯1”}]

我传递要匹配的值和这个列表,但当我找到匹配的值时,我只想传递列表的第二个元素,例如,如果我传递“苏格拉底”,我应该返回“fork1,fork2”

这里是我的两个与之相关的功能

whichFork({Name},[X|Xs])  ->
 Fork  = element(2,X),%get forks 
 Phil  = element(1,X),%get phil name
 Check = are_the_same(Phil,Name),%find out if they match 
  case Check of
    true-> Fork;%return forks in string
    false->whichFork(Name,Xs)%false repeat iterating the list
  end;
whichFork(_,[]) ->  %not found
false.

are_the_same(A,B) when A=:=B ->
  true;
are_the_same(_,_) ->
  false.

我在网站上搜索过,没有这样的问题,因此非常感谢任何帮助

您可以使用
PropList:get_value
。 这是文件:


如果您想要total元素,也许可以使用您可以使用
proplist:get\u value
。 这是文件:


如果你想要total元素,也许你可以使用BlackMamba已经给了你一个答案,但是我对你的代码有两点意见

首先,关于错误管理,在哲学家问题中,没有可能(除了代码中的错误)您正在寻找一个不存在的名称,因此案例
whichFork(,[])->false。
是无用的,只是延迟了代码崩溃的时刻

第二个是模式匹配的用法:当A=:=B->时,您可以编写代码
are\u same(A,B)…
这样
are\u same(A,A)->…
它给出相同的结果,您可以将其扩展到wichFork函数:

whichFork(Name,[{Name,Forks}|Xs])  -> Forks;
whichFork(Name,[_|Xs])  -> whichFork(Name,Xs).

BlackMamba已经给了你答案,但我对你的密码有两点意见

首先,关于错误管理,在哲学家问题中,没有可能(除了代码中的错误)您正在寻找一个不存在的名称,因此案例
whichFork(,[])->false。
是无用的,只是延迟了代码崩溃的时刻

第二个是模式匹配的用法:当A=:=B->时,您可以编写代码
are\u same(A,B)…
这样
are\u same(A,A)->…
它给出相同的结果,您可以将其扩展到wichFork函数:

whichFork(Name,[{Name,Forks}|Xs])  -> Forks;
whichFork(Name,[_|Xs])  -> whichFork(Name,Xs).