erlang 문법 삽질

    # 빈 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

    댓글

    Designed by JB FACTORY