Ocaml

OCaml의 Queue 2

seungh2 2021. 9. 4. 09:25

OCaml에서 기본적으로 제공하는 Queue를 사용해보자.

 

Queue 모듈

  • create
    • create ()
    • empty queue를 반환한다.
  • add와 push
    • add value queue / push value queue
    • queue에 value를 넣는다.
  • take와 pop
    • take queue / pop queue
    • queue의 top에 있는 걸 꺼낸다.
  • top
    • top queue
    • queue의 top을 알려준다. (take와 pop과 달리 알려주기만 하고 꺼내지는 않음)
  • is_empty
    • is_empty queue
    • queue가 비어있으면 true, 그렇지 않으면 false
  • iter
    • iter f queue
    • queue의 각 원소에 대해 f 를 실행한다.
  • length
    • length queue
    • queue의 크기를 반환한다.
  • copy
    • copy queue
    • queue를 복사한 또 다른 큐를 반환한다.
  • clear
    • clear queue
    • queue의 원소를 다 꺼낸다.

 

그림 1

1. create로 초기 큐 q를 생성한다.

2. is_empty로 q가 비어있는지 확인한다.

3. add와 push를 이용해서 q에 4, 1, 9, 2, 6을 순서대로 삽입하고 완료하면 끝났다는 문구를 출력한다.

4. is_empty로 q가 비어있는지 확인한다.

5. top을 이용하여 현재 q의 top을 출력하고 iter를 이용하여 q의 원소를 출력한다.

6. take를 이용하여 q의 top을 꺼내고 iter를 이용하여 q의 원소를 출력한다.

7. pop을 이용하여 q의 top을 꺼내고 iter를 이용하여 q의 원소를 출력한다.

8. length를 이용하여 q의 크기를 출력한다.

9. copy로 q와 똑같은 q1을 만들고 iter를 이용하여 q1의 원소를 출력한다.

10. clear로 q1의 원소를 모두 없애고 is_empty를 이용하여 q1이 비어있는지 확인한다.

그림1의 결과

역시 구현해서 사용하는 것보다 제공되는 것을 사용하는 것이 편리한 것 같다.

저번에 구현해서 사용한 ListQueue는 list가 immutable이기 때문에 dequeue를 했을 때 dequeue를 한 큐를 반환하였는데

OCaml에서 기본적으로 제공하는 Queue는 mutable하기 때문에 take와 pop이 top인 원소를 반환하고 큐는 알아서 바뀐다.

 

이 글은 제가 Ocaml을 공부하며 작성한 글로 정확하지 않은 부분이 있을 수 있습니다.

728x90