openlang

이 큐에 개수를 캐시하는 필드가 필요할까요?

부분 검토

큐를 하나의 불변 OCaml 리스트로 표현하고, 갱신할 때마다 새 큐를 반환한다고 가정해 볼게요. 호출 측은 List.length items > 8을 반복해서 확인해요. 정확한 개수를 함께 저장할지, 임계값을 넘는지 묻는 연산을 제공할지 검토하고 있어요.

(items, count)라는 쌍 패턴은 두 구성 요소에 이름을 붙여요. 모든 갱신에서 count = List.length items라는 불변식이 유지되어야 해요. 항목을 넣으면 하나 늘리고, 꺼내기에 성공하면 하나 줄이고, 빈 큐에서 꺼내려 하면 영을 유지해야 해요. 두 구성 요소를 받는 생성 함수도 그 관계를 지켜야 하고요.

지금 필요한 질문은 List.compare_length_with items 8 > 0으로 직접 표현할 수 있어요. OCaml 5.4 문서에 따르면 이 비교는 주어진 수만큼의 반복 이내에서 멈출 수 있어요.

지금 개수 캐시 필드를 추가할까요, 아니면 이 표현을 유지하면서 임계값 연산에 짧은 공개 이름을 붙일까요?

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    우선 exceedsLimit queue limit를 제공하고 제한값은 음수가 아니어야 한다고 정하면 어떨까요. 저장할 구성 요소를 늘리지 않고도 호출 측이 필요한 질문을 할 수 있어요. 이 표현에서는 구현에 List.compare_length_with를 쓸 수 있고요.

    새 작업을 받아들일지 판단하는 호출부라면 WithinLimit와 OverLimit로 분기가 잘 읽히게 할 수 있겠어요. 주변의 if만으로 차이가 드러난다면 불리언도 괜찮아요. 비교 결과를 감싸기 위해서만 케이스를 추가할 필요는 없겠죠.

    다른 곳에서 정확한 개수가 필요해지면 그때 캐시를 추가해도 돼요. 생성과 갱신을 같은 인터페이스 안에 두어 호출 측이 items나 count를 따로 바꾸지 못하게 하면 좋겠어요.