Haskell читает матрицу из списка в файле и использует ее - PullRequest
3 голосов
/ 18 мая 2011

Привет, ребята. Мне нужно получить Матрицу из списка в файле.Пример:

file.txt

[1,2,3,4,5,6,7,8,9]

Я хочу прочитать это в этой форме: [[1,2,3], [4,5,6], [7,8,9]]

более того, мне нужно манипулировать им в другой функции, например:

func m x y = do{ printMatrix m; 
    return $ m !! x !! y;
}

Возможно ли это?

Спасибо

Ответы [ 2 ]

5 голосов
/ 19 мая 2011

Существует довольно наивный способ использования вложенных списков для вашей матрицы.Если ваши входные данные уже есть в этой форме на Хаскельском, вы также можете использовать функцию read для анализа входных данных.Например:

type Matrix a = [[a]]

readMatrix :: FilePath -> IO (Matrix a)
readMatrix path = f <- getFile path
                  return $ read f

elemAt :: Int -> Int -> Matrix a -> a
elemAt x y m = m !! x !! y

-- and so on
2 голосов
/ 19 мая 2011

решение может быть:

l2m ::(Eq a) ⇒ Int → [a] → [[a]]
l2m rsize as
    | rsize ≡ 0 = []
    | as ≡ [] = []
    | otherwise = [(take rsize as)] ++ l2m rsize (drop rsize as)

aij :: (Eq a) ⇒ Int → Int → [[a]] → a
aij i j as = (as !! (i - 1)) !! (j - 1)

чтобы использовать эту функцию, вам нужно будет получить свой вход в (Eq a) => [a]. надеюсь, это поможет ε / 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...