2009-12-07 2 views
8

가변 길이의 인자리스트로 함수를 정의 할 수 있습니까?Erlang 함수의 가변 길이 인자리스트

는 난 그냥 쓸 수 있습니다 알고

function() -> function([]). 
function(X) when not is_list(X) -> function([X]); 
function(X) -> do_something_with_arguments(X). 

하지만이 기술을 피하려고.

function(ListOfParameters)

다음은 상기 ListOfParameters을 반복 할 수 있습니다 그것을 할 수

답변

8

한 가지 방법은 목록에있는 모든 인수를 전달하는 것입니다. 이 방법을 사용하면 함수 선언에 여러 개의 "매개 변수"를 허용 할 수 있으며 선언에 더 많은 용어를 추가 할 수 있습니다 ... 그러나 그 것이 당신이 원하는 것일지는 확실하지 않습니다. C vararg 매개 변수 목록의 라인을 따라 생각하고 있습니까? 긍정적 인 경우 다음 단락을 읽으십시오.

당신은 얼랑은 패턴 매칭을 기반 것을 기억해야합니다. "선언"함수의 인수는 함수가 호출 될 때 일치 패턴으로 사용됩니다. Erlang의 힘을 완전히 활용하려면 을 "절차 프로그래밍"사고 방식을 떠나야합니다.

+0

답변의 첫 부분은 내가 언급 한 기술과 동일하므로 C와 비슷한 부분에 대해 생각하므로 두 번째 부분을 읽었으므로 이제 첫 번째 해결책으로 돌아 가야합니다. 응답 해 주셔서 감사합니다! –

+0

내 기쁨! 얼랑 (Erlang)과 즐거운 시간 보내십시오! – jldupont

+0

가변 인수 목록을 원하면 변수 목록을이 다른 함수에 전달하는 동안 다른 함수를 실행해야한다면 무엇을하는 것이 가장 좋을까요? – CMCDragonkai

8

는 @jldupont보다 훨씬 더 명시 : 없음!

구현되지 않았지만 동일한 이름을 가진 Erlang 함수에서 인수의 수가 다른 경우 다른 함수로 간주되므로 추가 할 수 없습니다.

+0

인수 목록을 분할하고 각 인수를 함수에 적용하는 방법이 있습니까? – CMCDragonkai

+0

@CMCDragonkai 각 요소에 동일한 기능을 적용한다는 의미입니까? 그 용도로 :'list : map' 또는리스트 comprehensions을 사용하여 결과리스트를 얻으십시오; 또는리스트에있는 다음 요소에 대한 호출에 반환 값을 폴드하는'목록 ​​: foldl'. – rvirding

+0

실제로 인수 목록이 있으면 다른 함수를 호출하고 인수 집합으로 목록을 전달하려고합니다. 엘릭서에는 '적용'이 있습니다. – CMCDragonkai