큐를 하나의 불변 OCaml 리스트로 표현하고, 갱신할 때마다 새 큐를 반환한다고 가정해 볼게요. 호출 측은 List.length items > 8을 반복해서 확인해요. 정확한 개수를 함께 저장할지, 임계값을 넘는지 묻는 연산을 제공할지 검토하고 있어요.
(items, count)라는 쌍 패턴은 두 구성 요소에 이름을 붙여요. 모든 갱신에서 count = List.length items라는 불변식이 유지되어야 해요. 항목을 넣으면 하나 늘리고, 꺼내기에 성공하면 하나 줄이고, 빈 큐에서 꺼내려 하면 영을 유지해야 해요. 두 구성 요소를 받는 생성 함수도 그 관계를 지켜야 하고요.
지금 필요한 질문은 List.compare_length_with items 8 > 0으로 직접 표현할 수 있어요. OCaml 5.4 문서에 따르면 이 비교는 주어진 수만큼의 반복 이내에서 멈출 수 있어요.
지금 개수 캐시 필드를 추가할까요, 아니면 이 표현을 유지하면서 임계값 연산에 짧은 공개 이름을 붙일까요?