9

私は C++ でコードを書いていますが、K/APL の配列指向のスタイルがとても気に入っています。

C++ で K/APL スタイルのプログラミングを可能にする、演算子オーバーロードのトリック / マクロ / ... の良いセットを知っている人はいますか?

ありがとう!

4

2 に答える 2

6

数学の場合、Blitz++は配列プログラミング用の最大のライブラリです。ドキュメントの例を次に示します。

#include <blitz/array.h>

using namespace blitz;

Array<int, 1> x(10);     // one-dimensional array of 10 int's
firstIndex i;            // place holder index
x = 10 * i;              // x == 0, 10, 20, 30...
x = 10 * tensor::i;      // a short form of the above two expressions

// another example, with array-level assignments and arithmetic
Array<int, 1> a(4), b(4), c(4);
a = 1, 2, 3, 4;
b = 5, 6, 7, 8;
c = a + b;

Blitz++ は、遅延評価に似たテンプレート メタプログラミング手法である式テンプレートを使用します。そのため、コンパイラによって生成されたコードは不要な一時変数を使用せず、手書きのループと同じくらい高速になるはずです。

興味のある人のために、同等の k コードを次に示します。

  x:10*!10
  x
0 10 20 30 40 50 60 70 80 90

  a:1 2 3 4
  b:5 6 7 8
  c:a+b
  c
6 8 10 12
于 2010-11-10T23:12:41.067 に答える
2

私は特にK/APLを見ていませんが、あなたの見方によっては、によって提供される演算子のオーバーロードのいくつかはstd::valarrayAPLに漠然と似ていると主張することができます。ユニバーサルキャラクター名のサポートにより、(少なくとも理論的には)それらのいくつかにAPLのような名前を提供することさえできます。

それでも、APL演算子にはまったくない優先順位と結合性を持つ、C ++の演算子など、APLとはまったく異なるいくつかの特性が残ります(少なくともメモリが機能する場合)。

于 2010-04-20T22:34:59.317 に答える