ARRAY-HAS-FILL-POINTER-P — 필 포인터 유무
ARRAY-HAS-FILL-POINTER-P — 필 포인터 유무
ARRAY-HAS-FILL-POINTER-P는 함수예요. 배열에 필 포인터(fill pointer)가 있는지 확인하는 술어(predicate)예요. 벡터처럼 늘어날 수 있는 배열인지 판별할 때 써요.
본문
시그니처는 이렇게 생겼어요.
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를 함께 보면 돼요.