0xd34df00d 09.10.2011 13:01 Azoth_primary

Интересно как. Вот есть матрицы, например. Вот их можно там складывать, умножать очевидным образом. Делить можно (A/B = C <=> A = CB). Ну с negate еще понятно, наверное — умножить матрицу на скаляр (-1). abs можно каким-то раком ввести, хотя сходу неочевидно, как, норму шоле выбрать какую. signum — ну, тоже хуй пойми, что это такое. Знак детерминанта? Знакоопределенность матрицы? fromInteger — создать матрицу 1×1 из скаляра?

Не, хуйня какая-то. Не буду я делать матрицу инстансом Num'а.

1. ulidtko 09.10.2011 13:15 dedicated microblogging account

делить можно *слева*, а можно и *справа*. Не забывай, ебена мать.

2. 0xd34df00dulidtko /1 09.10.2011 13:25 Azoth_primary

Че.

4. ulidtkoulidtko /1 09.10.2011 13:35 dedicated microblogging account

у матриц некоммутативное умножение и деление же. A/B для матриц может означать две разные вещи: AB¯¹ или B¯¹A.

5. Elemir 09.10.2011 13:35 desktop

Так, во-первых матрицы определённого размера можно рассматривать как Num, произвольного нельзя. И только квадратные. А fromInteger это E * n

6. Elemir 09.10.2011 13:36 desktop

Алсо ты хер, Num не требует деления.
class (Eq a, Show a) => Num a where
(+), (-), (*) :: a → a → a
— | Unary negation.
negate :: a → a
— | Absolute value.
abs :: a → a
— | Sign of a number.
— The functions 'abs' and 'signum' should satisfy the law:
--
— > abs x * signum x == x
--
— For real numbers, the 'signum' is either @-1@ (negative), @0@ (zero)
— or @1@ (positive).
signum :: a → a
— | Conversion from an 'Integer'.
— An integer literal represents the application of the function
— 'fromInteger' to the appropriate value of type 'Integer',
— so such literals have type @('Num' a) => a@.
fromInteger :: Integer → a

{-# INLINE (-) #-}
{-# INLINE negate #-}
x — y = x + negate y
negate x = 0 — x

7. ElemirElemir /6 09.10.2011 13:37 desktop

Матрицы n x n легко сюда вписать. Разве что с signum сложновато.

8. ElemirElemir /7 09.10.2011 13:39 desktop

Да не, тоже не сложно. Нужно только внимательно посмотреть на тип signum'а и abs:
abs :: a → a
signum :: a → a

9. 0xd34df00dElemir /5 09.10.2011 13:39 Azoth_primary

Почему это только квадратные?
И что ты имеешь ввиду под определенным размером?

10. 0xd34df00dulidtko /4 09.10.2011 13:39 Azoth_primary

А, ну с этой точки зрения да.

11. ulidtko0xd34df00d /9 09.10.2011 13:40 dedicated microblogging account

ты не можешь складывать матрицы разного размера, например. Так что у тебя будет счётное количество полей из матриц разных размеров.

12. Elemir0xd34df00d /9 09.10.2011 13:40 desktop

Потому что ты не можешь умножить две матрицы рандомных размеров. Num это кольцо, а матрицы сами по себе, — полугруппа.

13. 0xd34df00dulidtko /11 09.10.2011 13:41 Azoth_primary

Вот блядство.

14. 0xd34df00dElemir /12 09.10.2011 13:41 Azoth_primary

А, ну да, точно. Чего-то я об этом как-то не подумал, все матрицы не образуют группу по сложению/умножению/чотам еще.

15. Elemir0xd34df00d /14 09.10.2011 13:43 desktop

Бггг. Я бы завёл type class матричное пространство. Завёл бы sub type class матричное пространство конечных матриц, которое бы автоинстанировало Num.

16. ElemirElemir /15 09.10.2011 13:44 desktop

*Завёл бы sub type class матричное пространство конечных квадратных матриц
FIXED

17. 0xd34df00dElemir /16 09.10.2011 13:44 Azoth_primary

Мне квадратные матрицы нахуй не нужны. У меня чаще всего матрицы размерности n×n+1 (или -1, не помню) и n×1.

18. Elemir0xd34df00d /17 09.10.2011 13:45 desktop

Ужас, кому-то нужны неквадратные матрицы :O

19. ElemirElemir /18 09.10.2011 13:45 desktop

Ну ладно с векторами (n×1) ещё понятно, а зачем такое извращение как n×(n+1)?

20. 0xd34df00dElemir /18 09.10.2011 13:46 Azoth_primary

Якобиан функции нескольких аргументов, ёбана!

21. 0xd34df00dElemir /19 09.10.2011 13:46 Azoth_primary

А, матрица инцидентности, ебана! Вернее, там n+1×n.

Do you really want to delete ?