Хранение данных в haskell - превосходно, как строки и столбцы - PullRequest
1 голос
/ 13 января 2012

У меня следующий квест:

Мне нужно написать программу на Хаскеле, которая позволит мне создать что-то вроде листа Excel. Есть столбцы и строки, и каждая ячейка может содержать число, строку или некоторую функцию (сумма, среднее, умножение и т. Д.). Каждая из функций принимает в качестве параметров список ячеек, которые суммируются и т. Д.

Теперь я пытаюсь выяснить, как сохранить эти данные в моей программе ... Я думал о чем-то вроде этого:

data CellPos = CellPos Int Int -- row and col of Cell
data DataType = Text | String | SumFunction | ...... deriving (Enum)

data Cell = Cell CellPos DataType -- but here is a problem , how to put here data with type which depends on DataType???

Я хотел просто иметь большой список Cell и искать в нем указанный столбец / строку и т. Д.

Но должно быть какое-то лучшее решение для этого - может быть, какой-то двумерный массив, который автоматически корректирует его размер или что-то в этом роде?

Мне нужно будет сохранить / загрузить лист в / из файла ...

1 Ответ

6 голосов
/ 13 января 2012

Давайте ответим на один вопрос за раз:

data Cell = Cell CellPos DataType

"но здесь есть проблема, как разместить здесь данные с типом, который зависит от DataType ???"

Поместите этоданные в DataType:

data DataType = Text String | Number Double | Function CellPos (DataType -> DataType)

"Я хотел просто иметь большой список ячеек и искать в нем указанный столбец / строку и т. д. Но для этого должно быть какое-то лучшее решение - возможно, два двухмерныхмассив, который автоматически настраивает его размер или что-то в этом роде? "

Я предлагаю Map CellPos DataType.

" Мне придется сохранять / загружать лист в / из файла ... "

Самым простым, вероятно, будет получение Show и Read и использование полученных функций вместе с readFile и writeFile.Единственное предостережение здесь (относительно DataType, как определено ранее в этом ответе), состоит в том, что функции не могут быть сериализованы.Чтобы обойти это, создайте более явный тип для функций в ячейках - возможно, абстрактное синтаксическое дерево для некоторого простого языка выражений.

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