Я использую F # аналогичным образом, когда мне нужно быстро предварительно обработать некоторые данные или преобразовать данные в различные форматы. F # имеет большое преимущество в том, что вы можете создавать функции более высокого порядка для выполнения всевозможных подобных задач.
Например, мне нужно было загрузить некоторые данные из базы данных SQL и сгенерировать файлы сценариев Matlab, которые загружают данные. Мне нужно было сделать это для пары разных SQL-запросов, поэтому я написал эти две функции:
// Runs the specified query 'str' and reads results using 'f'
let query str f = seq {
let conn = new SqlConnection("<conn.str>");
let cmd = new SqlCommand(str, conn)
conn.Open()
use rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)
while rdr.Read() do yield f(rdr) }
// Simple function to save all data to the specified file
let save file data =
File.WriteAllLines(@"C:\...\" + file, data |> Array.ofSeq)
Теперь я мог легко написать конкретные вызовы для чтения нужных мне данных, преобразовать их в типы данных F #, выполнить некоторую предварительную обработку (при необходимости) и распечатать выходные данные в файл. Например для перерабатывающих компаний у меня было что-то вроде:
let comps =
query "SELECT [ID], [Name] FROM [Companies] ORDER BY [ID]"
(fun rdr -> rdr.GetString(1) )
let cdata =
seq { yield "function res = companies()"
yield " res = {"
for name in comps do yield sprintf " %s" name
yield " };"
yield "end" }
save "companies.m" cdata
Генерация вывода в виде последовательности строк также довольно аккуратна, хотя вы, вероятно, могли бы написать более эффективный построитель вычислений, используя StringBuilder
.
Другой пример использования F # в интерактивном режиме описан в моей книге функционального программирования в главе 13 (вы можете получить исходный код здесь ). Он подключается к базе данных Всемирного банка (которая содержит много информации о различных странах), извлекает некоторые данные, исследует структуру данных, преобразует их в типы данных F # и вычисляет некоторые результаты (и визуализирует их). Я думаю, что это (один из многих) видов задач, которые можно очень хорошо выполнить в F #.