요약 중첩 Case 문을 사용하는 것은 코드를 읽기 어렵게 만듦. 중첩 Case 문의 컨텍스트를 유지할 필요가 없다면, Case문에 Case를 중첩하지 말고 메서드로 빼서 Flat한 Case를 만드는 것이 좋을 것으로 판단됨. 함수로 풀어내기 이 코드는 리트코드 72번 문제를 풀면서 작성한 코드다. sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> {abs(I2-I1), DP}; sol(W1, W2, I1, I2, DP) -> {NewT1, NewDP} = case get(I1, I2, DP) of none -> case maps:get(I1, W1) =:= maps:get(I2, W2) of true -> sol(W1, W2, I1-1, I2-1, DP); _..
1. 가드 절에는 다양한 함수가 올 순 없음 가드 절에서는 사용자 정의 함수를 사용할 수는 없다. 가드 절에서 사용할 수 있도록 정의된 몇몇 함수만 호출할 수 있다. 2. If 절에서 마지막 부분은 항상 true로 처리 case ... of 문을 이용할 때, '아무거나 와도 상관없음'을 '_'로 표현했지만, If절은 'true'로 처리한다. If절은 패턴 매칭이 아니라 true / false를 판단하기 때문인 듯. 3. 함수와 클로저 handle_regular_file(Name, Queue) -> case filename:extension(Name) of ".erl" -> {continue, Name, fun() -> dequeue_and_run(Queue) end}; _NonErl -> dequeue_..
% 두 코드는 같은 패턴 매칭을 의미함. % 즉, ';'는 'orelse'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 orelse I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0; I2 == 0-> % 두 코드는 같은 패턴 매칭을 의미함. % 즉, ','는 'andalso'로 동작 sol(_, _, I1, I2, DP) when I1 == 0 andalso I2 == 0-> sol(_, _, I1, I2, DP) when I1 == 0, I2 == 0->
참고 https://learnyousomeerlang.com/the-count-of-applications#from-otp-application-to-real-application 1. 이번 챕터에서 할 일 이번 챕터에서는 다음 작업을 진행하려고 한다. 이전에 구현했던 ppool을 이용해서 특정 작업을 진행함. 특정 작업은 .erl 파일을 읽고, 각 정규표현식에 해당되는 수식이 몇 개 있는지 Count 하는 것임. 이렇게 구현할 어플리케이션의 이름은 erlcount라고 한다. 다음과 같은 구조로 갈 것이고, 각 모듈의 역할은 다음과 같다. erlcount_counter : 프로세스 풀의 워커로 동작함. erlcount_sup : 워커 프로세스의 슈퍼바이저로 동작함. erlcount_dispatch : 디..
참고 https://learnyousomeerlang.com/distribunomicon#firewalls 10 . The Calls from Beyond 앞선 장에서 분산 얼랭에서 필요한 기초적인 부분을 모두 공부했다. 아래에서는 알면 좋을만한 도구를 더 공부하려고 한다. 10.1 얼랭 쉘에서 분산 노드 실행하기 net_kernel:start([Name, Type, HeartbeatInMilliseconds]) % for example net_kernel:start([romero, shortnames, 15000]). 다음 명령어를 이용하면 얼랭 쉘에서 새로운 분산 노드를 실행할 수 있다. 얼랭은 각 분산 노드들이 살아있는 상태를 유지하도록 'HeartBeat'을 보내는데, 기본값은 15초다. 즉, 얼..