2010-04-06 6 views
6

나는 매칭 및 삭제 항목

[{x, a, y}, {x, b, y}]. 

이 내장 함수 있는가, 튜플, 말의 목록을 (또는 나는 BIFS의 조합을 사용할 수 있습니다) {x, _, y} 일치하는 모든 튜플을 삭제 , 일치 및 삭제에서 두 번째를 무시하고 튜플의 첫 번째 및 세 번째 용어를 기반으로?

답변

13

lists:filter/1 기능은 사용자의 요구 사항과 일치합니다.

Ls = [{x,a,y}, {a,b,c}], 
F = fun ({x,_,y}) -> false ; (_) -> true end, 
lists:filter(F, Ls). 

map comprehension은 map/2와 lists : filter/2와 같은 목록 통합을 사용할 수도 있습니다. 당신의 술어가 반대 인 경우

[L || L <- Ls, F(L)] 

는 점에서 당신 만 일치 {X, _, Y} 당신이 발전기는 패턴과 일치하는하지 필터링 때문에, 다음과 같이 쓸 수를 원했다.

[L || {x,_,y}=L <- Ls] 
+0

필자는 목록을 어떻게 사용했는지 : 위의 필터를 따라했지만 변수를 사용하여이를 수행하려는 경우 작동하지 않습니다. 다음과 같이하십시오 : F = 재미 ({_, _ 채널}) -> 참; (F(), NewServerState # server_st.client_channel), 채널이 F 스코프에 정의 된 것처럼 보입니다. 외부 범위에 정의 된 "채널"에서 필터링하려면 어떻게해야합니까? – Kersch