얼랑 (Erlang)에서 일반적인 디자인 패턴 인 코딩 문제가 있지만 해결 방법에 대한 정보를 찾을 수 없습니다.디자인 패턴? 함수는 첫 번째 {success} 결과를 검색하여 목록을 반복합니다.
리스트 L이 있습니다. L의 모든 요소에 함수 f를 적용하고 L의 모든 요소를 동시에 실행하려고합니다. f (Element)에 대한 각 호출은 성공하거나 실패합니다. 대다수의 경우 실패 할 것이지만 때때로 L 내의 특정 요소에 대해 성공할 것입니다.
af (Element)가 성공할 경우 "성공"및이 f의 모든 호출을 종료합니다. L의 다른 요소 - 첫 번째 "성공"은 내가 관심있는 부분입니다. 반면에 f (Element)가 L의 모든 요소에 대해 실패하면 "실패"를 반환하고 싶습니다.
예를 들어, L이 정수의 목록이고 F가 L의 요소가 3이면 {success}를 반환하고 다른 값의 경우 {fail}을 반환한다고 가정합니다. L에 3이 있으면 가능한 한 빨리 찾으려고합니다. 얼마나 많은 3이 존재하는지, 적어도 하나의 3이 존재하는지 여부는 상관하지 않습니다. f를 다음과 같이 수 :
f(Int) ->
case Int of
3 -> {success};
_ -> {fail}
end.
나는 목록이 하나 이상의 3가 포함되어 있는지 확인하고 가능한 한 빨리 돌아 INT의 목록을 반복 할 수 있습니까
?
은 분명히이 공통 기능적인 디자인 패턴, 그리고 난 그냥
'wait_for_result/2'에서 어떤 worker가'false'를 리턴하는지에 관심이 없다는 것을 알면 이것을 최적화 할 수 있습니다. 따라서 매번 목록의 첫 번째 요소를 제거하면 충분합니다. – rvirding
'exit (have_result)'를 실행하면 남아있는 모든 작업자 프로세스가 링크 될 때 ('spawn_link'로 시작됨)'has_result'가'normal'이 아니므로 종료 될 것이므로 오류 종료로 처리해야 함을 언급해야합니다. – rvirding
당신은 물론 맞습니다. 의견에 대한 답변을 업데이트했습니다. –