erlang 문법 삽질
- 프로그래밍 언어/erlang
- 2023. 10. 10.
# 빈 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로 사용
-define(INF, 9999).
# 쓸 때는 이렇게
Value = ?INF.
List Match
1> [Q|W] = [1,2,3,4,5].
[1,2,3,4,5]
2> Q.
1
3> W.
[2,3,4,5]
일반적인 경우에는 각각 패턴 매칭된다.
4> [QQ|WW] = [1].
[1]
5> QQ.
1
6> WW.
[]
리스트에 항목이 하나만 있을 때도 패턴 매칭이 된다. Tail은 없는 것으로 매칭을 할 수 있는 것 같다.
7> [QQQ|WWW] = [].
** exception error: no match of right hand side value []
아무런 항목도 없는 리스트를 패턴 매칭으로 풀려고 하면, 위와 같은 에러가 발생한다. 패턴 매칭을 풀 때 QQQ는 값 하나, WWW는 나머지 리스트로 되는데, QQQ에 아무런 값도 지정이 될 수 없는 것이 허용되지 않는 것 같다.
투 포인터 구현 시,
- 투 포인터를 구현할 때, 인덱스로 접근해야하는 경우가 있다. 그런데 erlang에서 list에 특정 인덱스로 접근하는 것은 O(N) 시간 복잡도가 필요하다. 이유는 erlang의 List가 LinkedList로 구현되어 있기 때문이다.
- 이럴 때는 리스트 대신 튜플로 구현하면 된다. 튜플은 인덱스로 접근하는데 O(1)의 시간을 사용함.
# 튜플 인덱스 접근
A = element(Index, Tuple).
# 튜플 사이즈
Len = tuple_size(Tuple).
'프로그래밍 언어 > erlang' 카테고리의 다른 글
erlang 공부 : more on multiprocessing (1) | 2023.12.10 |
---|---|
erlang 공부 : erlang Shell (0) | 2023.12.10 |
erlang : 오류 및 프로세스 (0) | 2022.10.12 |
erlang : 재귀 (0) | 2022.09.24 |
erlang 9장 : 병행 프로그램과 오류 (1) | 2022.09.21 |