Моей реализации умножения матрицы является:Изменения ненужного вывода типа В Haskell
mtrxMult :: (Num a) => [[a]] -> [a] -> [a] -> [a]
mtrxMult [[]] _ _ = []
mtrxMult xs [] vec = 0 : mtrxMult xs vec vec
mtrxMult (x:xs) (v:vs) vec = head x * v + mtrxMult (tail x : xs) vs vec
Идея заключается в том, что вызов функции mtrxMult [[0,1],[1,0]] [2,3] [2,3]
будет расширяться 0 * 2 + 1 * 3 : 2 * 1 + 3 * 0 : []
которая будет оценивать в [3,2]
. Однако компилятор ожидает, что x будет списком списков, а не списком, head которого является числом. Что относительно системы вывода типа Haskell дает это ожидание и как я могу изменить код для последовательной реализации матричного умножения? ошибки времени
Не закончили просматривать, но вы уверены, что хотите, чтобы ваш базовый регистр был '[[]]' (ровно один пустой список внутри списка)? –
Я слишком устал, чтобы исправить проблемы, связанные с algorthmic, но проблемы типа возникают из-за использования '+' в строке 4 вместо ':' – jozefg