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 に答える