K / APL стиль программирования в C ++? - PullRequest
9 голосов
/ 21 апреля 2010

Я пишу код на C ++, но мне действительно нравится стиль, ориентированный на массивы K / APL.

Кто-нибудь знает хороший набор трюков / макросов перегрузки операторов, позволяющих программировать в стиле K / APL на C ++?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 11 ноября 2010

Для математики 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
2 голосов
/ 21 апреля 2010

Я специально не смотрел на K / APL, но, в зависимости от вашей точки зрения, вы можете утверждать, что некоторые перегрузки операторов, предоставляемые std::valarray, в некоторой степени похожи на APL. Благодаря поддержке имен универсальных символов вы можете (по крайней мере, теоретически) даже предоставить APL-подобные имена для некоторых из них.

Это все еще оставляет некоторые характеристики, которые совсем не похожи на APL, такие как операторы в C ++, имеющие приоритет и ассоциативность, а операторы APL вообще не имеют (по крайней мере, если память служит).

...