수색…


비고

Erlang은 원래 Ericsson 컴퓨터 과학 연구소에서 개발 된 프로그래밍 언어로 OTP (Open Telecom Platform)는 Erlang의 미들웨어 및 라이브러리 모음입니다. Erlang / OTP는 강력한 내결함성을 구축하기 위해 여러 가지 에릭슨 제품에서 전투 테스트를 거쳤습니다 (예 : AXD301 (ATM 스위치)). Erlang / OTP는 현재 Ericsson의 Erlang / OTP 부서에서 관리하고 있습니다. "( erlang.org )

여기에서 시작하십시오.

설치 지시 사항은 설치 주제를 참조하십시오.

모래밭

  1. 공식 얼랑 사이트 : https://www.erlang.org
  2. Erlang과 Elixir 모두를위한 인기있는 패키지 관리자 : http://hex.pm
  3. 얼랑 무늬 : http://www.erlangpatterns.org/

버전

번역 릴리즈 노트 출시일
19.2 http://erlang.org/download/otp_src_19.2.readme 2016-12-14
19.1 http://erlang.org/download/otp_src_19.1.readme 2016-09-21
19.0 http://erlang.org/download/otp_src_19.0.readme 2016-06-21
18.3 http://erlang.org/download/otp_src_18.3.readme 2016-03-15
18.2.1 http://erlang.org/download/otp_src_18.2.1.readme 2015-12-18
18.2 http://erlang.org/download/otp_src_18.2.readme 2015-12-16
18.1 http://erlang.org/download/otp_src_18.1.readme 2015-09-22
18.0 http://erlang.org/download/otp_src_18.0.readme 2015-06-24
17.5 http://erlang.org/download/otp_src_17.5.readme 2015-04-01
17.4 http://erlang.org/download/otp_src_17.4.readme 2014-12-10
17.3 http://erlang.org/download/otp_src_17.3.readme 2014-09-17
17.1 http://erlang.org/download/otp_src_17.1.readme 2014-06-24
17.0 http://erlang.org/download/otp_src_17.0.readme 2014-04-07
R16B03-1 http://erlang.org/download/otp_src_R16B03-1.readme 2014-01-23
R16B03 http://erlang.org/download/otp_src_R16B03.readme 2013-12-09
R16B02 http://erlang.org/download/otp_src_R16B02.readme 2013-09-17
R16B01 http://erlang.org/download/otp_src_R16B01.readme 2013-06-18
R16B http://erlang.org/download/otp_src_R16B.readme 2013-02-25

안녕하세요 세계

Erlang에서 "hello world"애플리케이션을 작성할 때 알아야 할 두 가지 사항이 있습니다.

  1. 소스 코드는 선택한 텍스트 편집기를 사용하여 erlang 프로그래밍 언어로 작성됩니다.
  2. 그런 다음 응용 프로그램이 erlang 가상 시스템 에서 실행됩니다. 이 예제에서 우리는 erlang 쉘을 사용하여 erlang VM과 상호 작용할 것입니다.

먼저 응용 프로그램 소스 코드 :

다음을 포함하는 새 파일 hello.erl 을 작성하십시오.

-module(hello).
-export([hello_world/0]).

hello_world() ->
  io:format("Hello, World!~n", []).

이것이 의미하는 바를 간단히 살펴 보겠습니다.

  • -module(hello). 모든 erlang 함수는 모듈 안에 존재 합니다 . 그런 다음 모듈은 모듈 모음 인 응용 프로그램을 작성하는 데 사용됩니다. 첫 번째 줄은이 모듈을 식별하는 것입니다. 즉 hello 입니다. 모듈은 Java의 패키지 와 비교 될 수 있습니다.
  • -export([hello_world/0]). 컴파일러에게 어떤 함수가 "public"(OO 언어와 비교 될 때)인지, 그리고 관련 함수의 아티 (arity )를 만들도록 지시합니다. 인수는 함수가 취하는 인수의 수입니다. erlang에서 1 개의 인수를 가진 함수는 2 개의 인수를 가진 함수와는 다른 함수로 보여지기 때문에 이름은 완전히 같을 수 있습니다. 즉, hello_world/0 은 예를 들어 hello_world/1 과 완전히 다른 기능입니다.
  • hello_world() 함수의 이름입니다. -> 는 함수의 구현 (본문)으로 전환하는 것을 나타냅니다. 이것은 "hello_world ()가 ...로 정의 됨"으로 읽을 수 있습니다. hello_world() (인수 없음)는 VM에서 hello_world/0 으로 식별되고 hello_world(Some_Arg)hello_world/1 로 식별됩니다.
  • io:format("Hello, World!~n", []) 모듈 io 에서 표준 출력을위한 함수 인 format/2 함수 format/2 호출합니다. ~n 은 새로운 행을 인쇄하는 형식 지정자입니다. [] 는 출력 문자열에 형식 지정자로 표시된 인쇄 할 변수의 목록입니다.이 경우에는 아무 것도 표시되지 않습니다.
  • 모든 erlang 문은 a로 끝나야합니다 . (점).

Erlang에서는 함수에서 마지막 명령문의 결과가 리턴됩니다.

이제 애플리케이션을 실행 해 보겠습니다.

hello.erl 파일과 같은 디렉토리에서 erlang 쉘을 시작하십시오 :

$ erl

다음과 같은 프롬프트가 나타납니다 (버전이 다를 수 있음).

Eshell V8.0  (abort with ^G)
1>

이제 다음 명령을 입력하십시오.

1> c(hello).
{ok,hello}
2> hello:hello_world().
Hello, World!
ok

각 줄을 하나씩 차례로 살펴 보겠습니다.

  • c(hello) -이 명령은 원자 hello 에서 함수 c 를 호출합니다. 이것은 효과적으로 Erlang에게 hello.erl 파일을 찾아 모듈로 컴파일하고 ( hello.beam 이라는 파일이 디렉토리에서 생성 될 것입니다) 환경으로로드합니다.
  • {ok, hello} - 위의 함수 c 를 호출 한 결과입니다. 그것은 원자 ok 와 원자 hello 포함하는 튜플입니다. Erlang 함수는 일반적으로 {ok, Something} 또는 {error, Reason} 중 하나를 반환합니다.
  • hello:hello_world() - hello 모듈에서 hello_world() 함수를 호출합니다.
  • Hello, World! - 이것은 우리의 기능이 인쇄하는 것입니다.
  • ok - 이것은 우리 함수가 반환 한 것입니다. Erlang은 함수형 프로그래밍 언어이므로, 모든 함수는 무언가를 반환 합니다 . 우리의 경우 hello_world() 에서 아무것도 반환하지 않았지만, 그 함수의 마지막 호출은 io:format(...) 이었고 그 함수는 ok 반환했습니다. 다시 함수가 반환 한 값입니다.

모듈

erlang 모듈은 몇 개의 함수가 그룹화 된 파일입니다. 이 파일의 확장자는 .erl 입니다.

hello.erl 이라는 이름의 "Hello World"모듈은 아래와 같습니다

-module(hello).
-export([hello_world/0]).

hello_world() ->
  io:format("Hello, World!~n", []).

파일에서 모듈 이름을 선언해야합니다. 앞에서 설명한 바와 같이 .erl 확장자 앞에 모듈 이름과 파일 이름이 동일해야합니다.

기능

함수는 함께 그룹화 된 명령 집합입니다. 이러한 그룹화 된 명령어는 함께 특정 작업을 수행합니다. erlang에서는 모든 함수가 호출 될 때 값을 반환합니다.

다음은 두 개의 숫자를 더하는 함수의 예입니다.

add(X, Y)-> X + Y.

이 함수는 X 및 Y 값을 사용하여 추가 연산을 수행하고 결과를 반환합니다. 기능은 다음과 같이 사용할 수 있습니다.

add(2,5).

함수 선언은 세미콜론으로 구분 된 여러 절로 구성 될 수 있습니다. 이 절 각각의 인수는 패턴 일치로 평가됩니다. 다음 함수는 인수가 Form의 튜플 인 경우 'tuple'을 반환합니다. {test, X} 여기서 X는 임의의 값이 될 수 있습니다. Argument가 [ "test", X] 형식으로 길이 2의 목록이고 다른 경우에는 '{error, "Reason"} "을 반환하면'list '를 반환합니다.

function({test, X}) -> tuple;
function(["test", X]) -> list;
function(_) -> {error, "Reason"}.

인수가 튜플이 아니면 두 번째 절이 평가됩니다. 인수가 목록이 아닌 경우 세 번째 절이 평가됩니다.

함수 선언은 소위 'Guards'또는 'Guard Sequences'로 구성 될 수 있습니다. 이 가드는 함수의 평가를 제한하는 표현식입니다. Guard가있는 기능은 모든 Guard Express가 참값을 산출 할 때만 실행됩니다. 여러 가드는 세미콜론으로 구분할 수 있습니다.

function_name(Argument) when Guard1; Guard2; ... GuardN -> (...).

'function_name'함수는 Guard Sequence가 true 일 때만 평가됩니다. 인수 X 가 적절한 범위 (0..15)에있는 경우에만 다음 함수가 true를 반환합니다.

in_range(X) when X>=0; X<16 -> true;
in_range(_) -> false.

목록 이해력

목록 내포는 기존 목록을 기반으로 목록을 작성하는 구문 구조입니다.
Erlang에서리스트의 이해력은 [Expr || Qualifier1, ..., QualifierN] .
한정자는 Generators Pattern <- ListExpr 또는 integer(X) 와 같은 필터로 true 또는 false 평가됩니다.

다음 예제에서는 하나의 생성자와 두 개의 필터로 구성된 목록 이해를 보여줍니다.

[X || X <- [1,2,a,3,4,b,5,6], integer(X), X > 3].

결과는 3보다 큰 정수만 포함하는 목록입니다.

[4,5,6]

Erlang 셸 시작 및 중지

Erlang 쉘 시작하기

UNIX 시스템에서 명령 프롬프트에서 erlang 쉘을 시작하려면 erl 명령을 사용하십시오

예:

$ erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> 

셸을 시작할 때 표시되는 텍스트는 실행중인 Erlang 버전과 erlang 시스템에 대한 기타 유용한 정보를 알려줍니다.

Windows에서 쉘을 시작하려면 Windows 시작 메뉴에서 Erlang 아이콘을 클릭하십시오.

Erlang 셸 중지

erlang 쉘의 제어 된 종료를 위해 다음과 같이 입력하십시오 :

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> q().

UNIX 시스템에서 Ctrl + C를 누르거나 Windows에서 Ctrl + Break를 눌러 Erlang 쉘을 종료 할 수도 있습니다. 그러면 다음 프롬프트가 나타납니다 :

Erlang/OTP 18 [erts-7.0] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution

그런 다음 a (abort)를 누르면 쉘이 직접 종료됩니다.

erlang 쉘을 종료하는 다른 방법은 다음과 같습니다 : init:stop() q() 또는 erlang:halt() 와 동일한 작업을하는 init:stop()

패턴 매칭

erlang에서 가장 일반적인 연산 중 하나는 패턴 일치입니다. 이것은 변수에 값을 할당 할 때 사용되며, 함수 선언과 casereceive 문과 같은 제어 흐름 구조에 사용 receive . 패턴 매칭 작업은 패턴과 패턴이 매치되는 것에 대한 용어의 적어도 두 부분을 필요로합니다.

erlang의 변수 할당은 다음과 같습니다 :

X = 2.

대부분의 프로그래밍 언어에서이 작업의 의미는 간단합니다. 원하는 이름 (이 경우 X )에 값 ( 2 )을 바인딩합니다. Erlang은 약간 다른 접근법을 가지고 있습니다 : 왼쪽 ( X )의 패턴을 오른쪽 ( 2 )의 용어와 일치시킵니다. 이 경우 효과는 동일합니다. 변수 X 가 이제 값 2 바인딩됩니다. 그러나 패턴 매칭을 사용하면 더 많은 구조화 된 할당을 수행 할 수 있습니다.

{Type, Meta, Doc} = {document, {author, "Alice"}, {text, "Lorem Ipsum"}}.

이 일치 연산은 오른쪽 항의 구조를 분석하고 왼쪽의 모든 변수를 해당 항의 적절한 값에 적용하여 왼쪽이 오른쪽과 같도록 수행됩니다. 이 예에서 Type 은 term : document , Meta to {author, "Alice"}Doc to {text, "Lorem Ipsum"} 바인딩됩니다. 이 특정 예에서 변수 : Type , MetaDoc언 바운드 로 간주되므로 각 변수를 사용할 수 있습니다.

바운드 변수를 사용하여 패턴 매칭을 생성 할 수도 있습니다.

Identifier = error.

Identifier 변수는 이제 error 값에 바인딩됩니다. 구조가 일치하고 바운드 변수 Identifier 가 용어의 오른쪽 오른쪽 부분과 같은 값을 가지기 때문에 다음 패턴 일치 작업이 작동합니다.

{Identifier, Reason} = {error, "Database connection timed out."}.

우변 항과 왼손 측 패턴이 일치하지 않으면 패턴 매칭 작업이 실패합니다. Identifier 는 값 error 바인딩되어 있기 때문에 다음 일치는 실패합니다. 오른쪽 편에 적절한 표현이 없습니다.

{Identifier, Reason} = {fail, "Database connection timed out."}.
> ** exception error: no match of right hand side value {fail,"Database ..."}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow