То, что я пытаюсь сделать это:Defmethod на произвольных спецификаторах типов?
(defgeneric fn (x))
(defmethod fn ((x (integer 1 *)))
"Positive integer")
(defmethod fn ((x (integer * -1)))
"Negative integer")
Я хочу обобщенную функцию, которая работает с произвольными спецификаторов типа, в том числе на основе списка из них, такие как (and x y)
, (or x y)
, (satisfies p)
и т.д. Теперь, когда я попытайтесь запустить вышеуказанный код, я получаю ошибку «Invalid Specializer». Немного исследований показывает, что defgeneric
предназначен для работы с CLOS, а не с произвольными спецификаторами типов. Есть ли в Common Lisp система с дегенерирующими свойствами, которая бы обеспечила мне поведение, которое я хочу для произвольных спецификаторов типов, а не только для классов?
Нуль положительный и отрицательный? –
@RainerJoswig Исправлено, но на самом деле это не меняет цели вопроса. –
true, но это создает проблему такой функции. Если оба метода совпадают: какой из них использовать? Методы не могут быть упорядочены ... Для нуля оба метода были сопоставлены. Какой из них следовало использовать? –