首页 > 解决方案 > 具有列表类型的定义方法

问题描述

是否可以在 Common Lisp 中定义具有“列表类型”的方法?

(defgeneric show (obj))

(defmethod show ((obj coordinate)) ;; Works
  ...)
(defmethod show ((obj [LIST OF coordinate])) ;; How to?
  ...)

标签: methodstypeslispcommon-lisp

解决方案


您可以在list类型上编写方法,但不能在任意类型说明符上编写方法。来自超规格:

如果 parameter-specializer-name 是一个符号,它会命名一个类;如果它是一个列表,它的形式是(eql eql-specializer-form)。

相关问题:任意类型说明符上的 Defmethod?

这样的事情可能对你有用:

(defmethod show ((obj coordinate))
  ...)

(defmethod show ((obj null)))
(defmethod show ((obj cons))  ;; Or just loop it.
  (show (car obj))
  (show (cdr obj)))

推荐阅读