Erlang-함수

Erlang은 함수형 프로그래밍 언어로 알려져 있으므로 Erlang에서 함수가 작동하는 방식에 대해 많은 강조를 기대할 수 있습니다. 이 장에서는 Erlang의 함수로 수행 할 수있는 모든 작업을 다룹니다.

함수 정의

함수 선언의 구문은 다음과 같습니다.

통사론

FunctionName(Pattern1… PatternN) ->
Body;

어디,

  • FunctionName − 함수 이름은 원자입니다.

  • Pattern1… PatternN− 각 인수는 패턴입니다. 인수 N의 수는 함수의 배열입니다. 함수는 모듈 이름, 함수 이름 및 배열로 고유하게 정의됩니다. 즉, 동일한 이름과 동일한 모듈에 있지만 배열이 다른 두 함수는 서로 다른 두 함수입니다.

  • Body − 절 본문은 쉼표 (,)로 구분 된 일련의 표현식으로 구성됩니다.

다음 프로그램은 함수 사용의 간단한 예입니다.

-module(helloworld). 
-export([add/2,start/0]). 

add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
start() -> 
   add(5,6).

위의 프로그램에 대해 다음 사항에 유의해야합니다.

  • 우리는 두 가지 기능을 정의하고 있습니다. add 2 개의 매개 변수를 취하고 다른 하나는 start 함수.

  • 두 기능 모두 내보내기 기능으로 정의됩니다. 이렇게하지 않으면 기능을 사용할 수 없습니다.

  • 한 함수는 다른 함수 안에서 호출 될 수 있습니다. 여기서는 시작 함수에서 추가 함수를 호출합니다.

위 프로그램의 출력은 다음과 같습니다.

산출

11

익명 함수

익명 함수는 연결된 이름이없는 함수입니다. Erlang에는 익명 함수를 정의하는 기능이 있습니다. 다음 프로그램은 익명 함수의 예입니다.

-module(helloworld). 
-export([start/0]). 

start() -> 
   Fn = fun() -> 
      io:fwrite("Anonymous Function") end, 
   Fn().

위의 예에 대해 다음 사항에 유의해야합니다.

  • 익명 함수는 fun() 예어.

  • 함수는 Fn이라는 변수에 할당됩니다.

  • 함수는 변수 이름을 통해 호출됩니다.

위 프로그램의 출력은 다음과 같습니다.

산출

Anonymous Function

여러 인수가있는 함수

Erlang 함수는 0 개 이상의 매개 변수로 정의 할 수 있습니다. 함수 오버로딩도 가능하며, 매개 변수 수가 다른 한 동일한 이름의 함수를 여러 번 정의 할 수 있습니다.

다음 예제에서 함수 데모는 각 함수 정의에 대한 여러 인수로 정의됩니다.

-module(helloworld). 
-export([add/2,add/3,start/0]). 

add(X,Y) -> 
   Z = X+Y, 
   io:fwrite("~w~n",[Z]). 
   
add(X,Y,Z) -> 
   A = X+Y+Z, 
   io:fwrite("~w~n",[A]). 
 
start() ->
   add(5,6), 
   add(5,6,6).

위의 프로그램에서 우리는 add 함수를 두 번 정의하고 있습니다. 그러나 첫 번째 추가 함수의 정의는 두 개의 매개 변수를 취하고 두 번째 함수는 세 개의 매개 변수를 취합니다.

위 프로그램의 출력은 다음과 같습니다.

산출

11
17

가드 시퀀스가있는 기능

Erlang의 함수에는 가드 시퀀스를 갖는 기능도 있습니다. 이는 true로 평가 될 때만 함수가 실행되도록하는 표현식에 불과합니다.

가드 시퀀스가있는 함수의 구문은 다음 프로그램에 나와 있습니다.

통사론

FunctionName(Pattern1… PatternN) [when GuardSeq1]->
Body;

어디,

  • FunctionName − 함수 이름은 원자입니다.

  • Pattern1… PatternN− 각 인수는 패턴입니다. 인수 N의 수는 함수의 배열입니다. 함수는 모듈 이름, 함수 이름 및 배열로 고유하게 정의됩니다. 즉, 동일한 이름과 동일한 모듈에 있지만 배열이 다른 두 함수는 서로 다른 두 함수입니다.

  • Body − 절 본문은 쉼표 (,)로 구분 된 일련의 표현식으로 구성됩니다.

  • GuardSeq1 − 함수가 호출 될 때 평가되는 표현식입니다.

다음 프로그램은 가드 시퀀스와 함께 함수를 사용하는 간단한 예입니다.

-module(helloworld). 
-export([add/1,start/0]). 

add(X) when X>3 -> 
   io:fwrite("~w~n",[X]). 

start() -> 
   add(4).

위 프로그램의 출력은 다음과 같습니다.

산출

4

추가 기능이 다음과 같이 호출 된 경우 add(3), 프로그램에서 오류가 발생합니다.