6

我正在使用 common-lisp 进行实时图形实验,到目前为止它非常棒。我对速度和与 cffi 轻松兼容的要求意味着我使用的是“类型化”数组。代码中真正难看的一个区域是我的矩阵和向量数学函数的通用版本。由于 CLOS 不能专注于数组的长度,我正在做这样的事情:

(defun v+ (vec-a vec-b)
   (%v+ vec-a vec-b (length a) (length b)))

(defmethod %v+ (va vb (la (eql 3)) (lb (eql 3)))
   ***CODE HERE***)

这有效,但感觉不对。我已经看到了各种 CL 实现的扩展,并听说了 MOP 的承诺。

我已经避开了这个,因为我担心它会破坏一些 CL 实现的功能,但我最近看到了Closer-to-Mop 项目

核心问题: MOP 是否提供了一种更有效的方法来专门研究长度?有什么我应该关注的领域/技术吗?

4

1 回答 1

0

你的代码对我来说很合适,你使用的是类型标记。

(defmethod v+ (vec-a vec-b)
   (labels ((find-tag (vec)
               (if (> (length vec) 3)
                   :more-than-3
                   :less-than-4)))
      (%v+ vec-a vec-b (find-tag a) (find-tag b)))

(defmethod %v+ (va vb (va-tag (eql :less-than-4)) (vb-tag (eql :less-than-4)))
   ***CODE HERE***)
于 2013-10-02T18:31:18.663 回答