首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常见lisp CLOS调度

常见lisp CLOS调度
EN

Stack Overflow用户
提问于 2014-07-22 00:14:56
回答 1查看 184关注 0票数 1

有没有一个好方法可以让泛型函数在列表的汽车上分派?

我一直在做一个符号代数程序,目前我将大量数据存储为列表,并使用不同的关键字作为car来指示类型。例如,我有一些简单存储为'(:simplex #(0 1 2)),还有一些我暂时称之为steps的东西存储为'(:step #(0 1 0 1))。我希望能够使用这两者的维度和边界,理想情况下使用一些内置的分派机制。

EN

回答 1

Stack Overflow用户

发布于 2014-07-22 01:26:15

有点老生常谈,但您可以使用eql专业人员完成此操作。

代码语言:javascript
复制
(defmethod foo ((first (eql :simplex)) (thing vector))
   <method body here>)

然后你就不得不把它叫做

代码语言:javascript
复制
(foo :step #(0 1 0 1))

代码语言:javascript
复制
(apply #'foo '(:step #(0 1 0 1)))

因此,对于您的情况,您应该这样做

代码语言:javascript
复制
(defmethod dimension ((type (eql :simplex)) (thing vector))
  ;; calculate dimension of a SIMPLEX here
  )

(defmethod dimension ((type (eql :step)) (thing vector))
  ;; calculate dimension of a STEP here
  )

boundary也是如此。

如果您正在处理的内容实际上是不同的结构,那么您可以考虑定义structclasses,而不是使用原始列表。在这一点上,您可以很容易地在适当的类型上定义方法,这将使您避开这种方法的笨拙的调用要求。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24869775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档