English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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' 함수;

  • 이 두 함수는 모두 'export' 함수로 정의되었습니다. 이렇게 하지 않으면 함수를 사용할 수 없습니다;

  • 함수는 다른 함수 내에서 호출될 수 있습니다. 여기서 'start' 함수는 'add' 함수를 호출합니다;

위의 코드의 출력 결과는 -

11

익명 함수

익명 함수는 함수이지만 이름과 연관이 없습니다. Erlang에서 익명 함수를 정의하는 도구가 있습니다. 다음 프로그램은 익명 함수의 예제입니다.

예제

-module(helloworld). 
-export([start/0]). 
start() -> 
   Fn = fun() -> 
      io:fwrite("익명 함수") end, 
   Fn().

위 예제에서 주의해야 할 몇 가지 포인트가 있습니다 -

  • 익명 함수는 'fun()' 키워드를 사용하여 정의됩니다

  • 이 함수는 'Fn'이라는 이름의 변수에 할당됩니다

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

위의 코드의 출력 결과는 -

익명 함수

다중 매개변수 함수 사용

Erlang 함수는 0개나 많은 매개변수를 사용하여 정의할 수 있습니다. 함수 오버로드도 가능하며, 매개변수의 개수가 다른 동일한 이름의 함수를 정의할 수 있습니다. 다음 예제에서는 demo 함수의 각 함수 정의가 많은 매개변수로 정의되었습니다.

예제 코드

-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 함수를 두 번 정의했습니다. 하지만 첫 번째 add 함수 정의는 두 개의 매개변수를 사용하고, 두 번째 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 함수가 add(3),이 프로그램은 오류가 발생할 것입니다。