ARRAY-HAS-FILL-POINTER-P — 필 포인터 유무

ARRAY-HAS-FILL-POINTER-P — 필 포인터 유무

ARRAY-HAS-FILL-POINTER-P는 함수예요. 배열에 필 포인터(fill pointer)가 있는지 확인하는 술어(predicate)예요. 벡터처럼 늘어날 수 있는 배열인지 판별할 때 써요.

출처: CLHS Function ARRAY-HAS-FILL-POINTER-P

본문

시그니처는 이렇게 생겼어요.

array-has-fill-pointer-p array => generalized-boolean
  • array — 배열.
  • generalized-boolean — generalized boolean(진리값).

동작은 이렇습니다. array에 필 포인터가 있으면 true를, 없으면 false를 반환해요.

(array-has-fill-pointer-p (make-array 4)) => implementation-dependent
(array-has-fill-pointer-p (make-array '(2 3))) => false
(array-has-fill-pointer-p (make-array 8 :fill-pointer 2 :initial-element 'filler)) => true

세 예제를 나눠 보면요.

  • 첫 번째는 옵션 없이 만든 한 축 배열인데, 필 포인터가 있느냐가 구현 의존적(implementation-dependent)이에요.
  • 두 번째는 2×3 다차원 배열이라 당연히 false예요. rank가 1이 아닌 배열은 필 포인터를 가질 수 없거든요.
  • 세 번째는 :fill-pointer 2로 만들어서 true가 돼요.

여기서 핵심 성질이 하나 드러나요. rank가 1이 아닌 배열은 필 포인터를 가질 수 없으므로, array-has-fill-pointer-p는 그런 배열을 받으면 항상 nil을 돌려줘요.

인자가 배열이 아니면 type-error 타입 오류를 신호해야 해요. 필 포인터를 만드는 쪽은 make-array, 현재 필 포인터 값을 읽는 쪽은 fill-pointer를 함께 보면 돼요.