참고 https://learnyousomeerlang.com/starting-out#the-shell Erlang Shell에서 실행 가능한 명령어 2> help(). ** shell internal commands ** b() -- display all variable bindings e(N) -- repeat the expression in query f() -- forget all variable bindings f(X) -- forget the binding of variable X ... erlang 쉘에서는 여러 명령어를 실행할 수 있다. 어떤 명령어를 실행할 수 있는지는 help().를 이용하면 된다. 예를 들어서 erlang 쉘에서 memory()를 실행하면 다음 결과를 확인할 수 있다. ..
# 빈 Map 생성 A = #{}. # Map에 데이터 넣기 B = A#{"d" => "DDD"}. # Map에서 데이터 가져오기 Hello = maps:get("MyKey", B). lists:foldl(함수, Acc, 리스트) lists:reverse()도 있음. lists ++ lists 하면 두개 Concat함. 반드시 True가 존재해야함. if 평가식 -> 수행할 값; true -> 수행할 값 end Acc = [1,2,3] Carry = 4 B = [Carry | Acc]; -> [4,1,2,3] List를 합칠 때, 뒷쪽에 있는 List는 풀어서 해준다. erlang의 List는 링크드 리스트다. 따라서 한번에 다 도는게 맞는 거 같음. Define 사용하기 # INF를 9999로 사용 -..
Link Link는 두 프로세스를 연결하는 명령어다. 두 프로세스가 연결되면 하나의 프로세스가 예상치 못한 throw, Exception이 발생할 경우 연결된 프로세스도 함께 종료된다. 이 때, Link는 양방향 연결을 의미한다. A가 죽어도 B에 영향을 주고, B가 죽어도 A에 영향을 주는 것을 의미한다. Link는 위와 같은 개념을 가진다. 프로세스끼리 Link를 하게 된다면 오류의 전파가 최대한 빨리 중지된다는 관점에서 유용하다. 함께 일하는 프로세스 중에서 일부에서 오류가 발생했다고 가정해보자. 멀쩡한 프로세스들은 문제가 생긴 프로세스들에게 의존하고 있을 수 있다. 이 때 상황을 해결하기 위한 방법은 멀쩡한 프로세스가 망가진 프로세스에게서 의존성을 최대한 없애는 것이다. 얼랭에서는 link를 이용..
대부분의 함수형 언어가 그렇듯, 얼랭도 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..