Я хотел бы иметь возможность использовать определенный тип в качестве специализированного параметра для параметра defmethod
. Мотивация - это читаемость и гибкость для изменения на более позднем этапе. Что-то вроде:Использование общего пользовательского типа Lisp в defmethod
(deftype foo() 'fixnum)
(defmethod bar ((x foo)) ...)
(defmethod baz ((x foo)) ...)
Однако это не работает. CLtL2 говорит «Форма deftype не создает классов».
Так что я должен написать:
(defmethod bar ((x fixnum)) ...)
(defmethod baz ((x fixnum)) ...)
В качестве альтернативы можно определить класс под названием foo
, который является не более чем оболочка вокруг fixnum
, но не было бы неприемлемым над головой что-то так просто как fixnum
?
Есть ли лучший способ?
CLtL2 устарел. Пожалуйста, используйте Common Lisp HyperSpec [CLHS] (http://www.lispworks.com/documentation/HyperSpec/Front/Contents.htm), который основан на стандарте ANSI Common Lisp. –
CLHS говорит о 'параметрах-specializer-names'' defmethod': _ Если параметр-specializer-name является символом, он называет класс_ – user3414663
На самом деле CLHS также говорит: «Оператор deftype не создает никаких классов. – user3414663