2015-02-14 2 views
0

Когда я вижу вектор Хаскелла, это не физика, вектор линейной алгебры, не так ли? Векторы в Java (как я помню) - это массив, к которому можно динамически добавить. Но это нельзя использовать в качестве научного вектора, не так ли? Как я могу создать структуру векторных данных науки в Haskell?Haskell Vector: не научные, инженерные векторы?

+1

Что вы подразумеваете под этим именем? Пожалуйста, будьте конкретны ... –

+3

Сначала вам понадобится способ получить научные номера в Haskell. К сожалению, он имеет только числовые типы с ограниченной точностью, а не реальные реальные числа или сложные числа, например, наука. Это может быть хорошей причиной для создания компилятора science-to-haskell. – ely

+0

Чтобы создать вектор «Math», вам нужен только тип с двумя полями: величина и направление. Это то, что вы имеете в виду? – dsm

ответ

1

Предполагаю, вы имеете в виду Data.Vector, и да, вы правы. Это не тот вектор, который нам известны математические части. Для «законного» вектора и любой другой линейной алгебры на свободных векторных пространствах существует пакет linear.

Data.Vector - это в значительной степени массив памяти (очень оптимизированный, очень хороший API).


Data.Vector действительно вводит в заблуждение название, и я предполагаю, что это прямо или косвенно вдохновлены из стандартной библиотеки vector шаблона класса С ++, который также вводит в заблуждение.

От here, в стандартной библиотеке С ++ ...

Это называется вектором, потому что Алекс Степанов, дизайнер стандартной библиотеки шаблонов, искал имя, чтобы отличить его от встроенного массивы. Он признает, что ошибся, потому что математика уже использует термин «вектор» для последовательности фиксированной длины цифр.
...
Урок Алекса: будьте очень осторожны каждый раз, когда вы что-то называете.

+2

C++? Вряд ли в крайнем случае. У C++ даже не было шаблонов до C++ 2.0 в 1989 году. Пересмотренный «3» отчет по алгоритмической языковой схеме вышел в 1986 году и уже использовал термин «вектор» таким образом. Я серьезно сомневаюсь, что это было первое. Самое лучшее, что я могу собрать, это то, что термин «вектор» использовался для долгое время относиться к одномерным массивам, вероятно, возвращаясь к раннему FORTRAN и APL, но я не мог этого гарантировать. – dfeuer

+0

@dfeuer Это хорошо знать +1, однако я не имею в виду первое появление термина в этом контексте. Я имею в виду, что для меня имеет смысл, что современные языки (и пакеты в этом случае) все еще продолжают называть его так же, как и из-за стандартной библиотеки C++; C++ напрямую влияет на реальную массу, из чего я могу сказать, например, FORTAN - не так много (я уверен, что это косвенно). Но я новая кровь, поэтому я могу быть полностью вне игры. В любом случае, спасибо, я понятия не имел, что вы сказали. – MasterMastic

+0

Ну, дело в том, что Haskell и C++ примерно так же далеки друг от друга, как и любые два типизированных языка программирования.Haskell - это функциональный язык (таким образом, он несколько исходит из традиции Лиспа, но более непосредственно из Миранды, и я полагаю, что это может повлиять на ML). Система типа Haskell также в некоторой степени связывает ее с традицией логического программирования, которая восходит к Prolog. Сочетание (относительной) чистоты и сильной типизации также связывает его с такими защищенными языками, как Coq и Agda. C++ происходит в совершенно другом направлении, больше Algol, BCPL, Fortran, PL/I. – dfeuer

0

Я думаю, вы хотите hmatrix, интерфейс Haskell для LAPACK и BLAS.

Смежные вопросы