동일한 유형의 항목 목록을 설명하는 유형 지정자를 정의하고자합니다. 그래서 (list-of integer)
은 (붙박이 인) (array integer)
과 비슷합니다. 다음과 같이 특정 유형으로 만들 수 있습니다.Common Lisp에서 일반적인 데이터 유형 지정자 (정수 목록과 같은)를 정의하는 방법은 무엇입니까?
(defun elements-are-integer (seq)
(every #'(lambda (x) (typep x 'integer)) seq))
(deftype list-of-integer()
'(and list (satisfies elements-are-integer)))
그러나 이것은 가능한 모든 유형에 대해이 작업을 수행해야한다는 것을 의미합니다. 유형이 다른 유형을 인수로 취하도록이 코드를 어떻게 변경하고 즉시 satisfies
술어를 구성 할 수 있습니까? 문제는 satisfies
에 전역 심볼이 필요하며 적절한 컨텍스트에서 조건 자 함수를 정의하는 방법을 알지 못합니다. (어쨌든 gensym
이 필요합니다. 또한 솔루션은 다른 패키지 내부에서 유형을 생성 할 수 있도록 작동해야합니다.
감사합니다. 정확하게 원했던 것이 아니더라도 그것은 확실히 유용합니다. –