Как добавить векторы в Аде

У меня есть вектор формы (x, y, x), представляющий координаты. Я хочу иметь возможность сделать что-то вроде (x, y, z) + (x2, y2, z2), чтобы создать новый набор координат. Ада говорит, что не может использовать «+» для составных типов, но, конечно же, я могу это сделать?


person Ben    schedule 18.09.2020    source источник
comment
Как вы определили свой вектор? Прочтите это: минимальный воспроизводимый пример.   -  person Keith Thompson    schedule 18.09.2020
comment
И обязательно покажите нам точное сообщение об ошибке в вашем вопросе. Ада, безусловно, может применять + к составным типам, если вы правильно его определите.   -  person Keith Thompson    schedule 18.09.2020


Ответы (2)


Если у тебя есть

type Vector is record
   X : Float;
   Y : Float;
   Z : Float;
end record;

вы можете определить + как

function "+" (L, R : Vector) return Vector is
  (L.X + R.X, L.Y + R.Y, L.Z + R.Z);

Будьте осторожны, когда вы определяете - аналогично использованию - повсюду! эту ошибку очень трудно заметить.

person Simon Wright    schedule 18.09.2020

Если вы определяете свои векторы так, чтобы они содержали элементы типа с плавающей запятой, вы можете использовать общий пакет Ada.Numerics.Generic_Real_Arrays. Этот пакет описан в разделе G.3.1 Справочного руководства по языку Ада.

Если вы хотите, чтобы ваши векторы содержали элементы типа комплексных чисел, вы можете использовать общий пакет, описанный в разделе G.3.2 Комплексные векторы и матрицы.

Если вы хотите использовать целочисленные типы в качестве векторных компонентов, вы можете написать функцию + для вашего целочисленного векторного типа.

person Jim Rogers    schedule 18.09.2020