대부분의 함수형 언어가 그렇듯, 얼랭도 for / while문을 제공하지 않는다. 이런 반복이 필요할 때, 재귀를 이용해서 하는 것이 필요하다. 재귀 함수를 짤 때 팁 기본적인 조건일 때 어떤 행동을 해야하는지를 먼저 설정한다. 종료 조건을 설정한다. 이후 기본적인 조건에 다음 재귀를 넣어준다. 길이 들어온 리스트의 모든 길이를 구하는 함수를 구현해보자. len([]) -> 0 len(_) -> 1 기본 조건과 종료 조건을 확인하면 다음과 같다. len([]) -> 0; len([_|T]) -> 1 + len(T). 여기에 추가적으로 재귀를 표현만 해주면 손쉽게 구현할 수 있다. 꼬리재귀 fac(N) when N == 0 -> 1; fac(N) when N > 0 -> fac(N-1) * N. 재귀가 길..
9.1 프로세스 연결하기 link(Pid) 프로세스와 프로세스를 연결하기 위해서는 link()라는 BIF를 이용해야한다. link를 이용하면 self() 프로세스와 Pid 프로세스는 연결되게 된다. 연결된다는 것은 하나의 프로세스가 죽으면 다른 프로세스는 종료 신호를 받게 되고, 종료 신호를 받은 프로세스는 별다른 조치를 하지 않는 경우 함께 죽게 된다. 프로세스는 종료 신호를 잡도록(Trap) 요청할 수 있고, 종료 신호를 잡아서 처리할 수 있는 프로세스를 시스템 프로세스라고 한다. 9.2 시스템 프로세스 만들기 process_flag(trap_exit, true), 시스템 프로세스는 다른 프로세스의 종료 신호를 받으면, 그 종료 신호를 처리할 수 있는 프로세스다. 시스템 프로세스를 만들기 위해서는 p..
프로세스 프로세스라는 것은 운영체제에서 자주 사용되는 용어이다. 그렇지만 얼랭에서 프로세스는 운영체제가 아닌 프로그래밍 언어에 속한다. 따라서 얼랭에서의 프로세스는 운영체제에서 가지고 있는 프로세스의 느낌과는 조금은 다르다. 프로세스의 생성과 제거가 매우 빠르다. 프로세스 간 메세지 전송이 매우 빠르다. 매우 많은 수의 프로세스를 가질 수 있음. 모든 OS에서 프로세스가 동일한 방식으로 동작한다. 프로세스는 메모리를 공유하지 않고 독립적이다. 프로세스가 상호작용하는 유일한 방법은 메세지 전달을 통해서다. 기본적으로 프로세스를 생성하거나 메세지를 전달하는 것은 커널을 통해서 하기 때문에 느린 것으로 인지된다. 그렇지만 얼랭에서의 프로세스는 프로그래밍 언어에 속하기 때문에 일반적으로 알고 있던 프로세스보다 ..
3.1 모듈 %%%------------------------------------------------------------------- %%% @author user %%% @copyright (C) 2022, %%% @doc %%% %%% @end %%% Created : 06. 9월 2022 4:13 PM %%%------------------------------------------------------------------- -module(geometry). -author("user"). %% API -export([area/1]). area({rectancle,Width,Ht}) -> Width * Ht ; area({circle, R}) -> 3.14159 * R * R. 모듈은 얼랭에서..
변수 설정 # 이거 안됨 a=1. ## 이건 됨 Abc = 1. ABC = 2. erlang의 모든 변수는 대문자로 시작해야한다. 변수 erlang에서 변수는 단일 할당 변수다. 변수는 두 가지 상태를 가짐 UnBound : 아직 값을 가지지 않음. "=" 연산자는 할당 연산자처럼 동작. Bound : 값을 가짐. "=" 연산자는 패턴 연산자로 동작. erlang에서 변수는 어떤 값에 대한 참조다. Bound 된 변수는 그 값을 담은 저장소 영역에 대한 포인터로 표현된다. erlang의 변수에는 atom도 할당이 가능하다. 익명 변수 _ : 익명변수 # 사용법 {_,{_,{_,{_,Who},_},_} = Person. "_"는 익명변수로 사용된다. 익명변수는 동일한 패턴에서 여러 번 나오더라도 같은 값으..