Haskell в императивном мозгу |
[Apr. 20th, 2008|08:19 pm] |
А какие есть у Хаскеля специальные возможности по экономии процессорного времени путём сохранения результатов вычислений (если таковые часто повторяются например) ? Либо какие есть приёмы написания программ с таким же свойством ?
Ну самый простой пример, как мне кажется, это проверка чисел на простоту, которая проверяет НЕ ВСЕ ДЕЛИТЕЛИ а только простые. Мы можем захотеть, чтобы эта функция нарабатывала себе список простых чисел, и пользовалась им постоянно. и при необходимости пополняла.
P.S. и какие есть интерфейсы к базам данных? |
|
|
Comments: |
Либо какие есть приёмы написания программ с таким же свойством ?
Ну самый простой пример, как мне кажется, это проверка чисел на простоту, которая проверяет НЕ ВСЕ ДЕЛИТЕЛИ а только простые.
Простые делители из ранее сохранённого файла, например ?
Смотри IO Monad
Ленивые структуры (например, списки). Структура определяется через себя же. Фокус в том, чтобы гарантировать, что для вычисления очередной части структуры достаточно знать вычисленные ранее части. Типа:
fibs = 1 : 1 : zipWith (+) fibs (tail fibs)
Здесь для вычисления первых двух чисел Фибоначчи не нужно знать вообще ничего, а для вычисления следующих нужно знать два предыдущих. Благодаря ленивости (список fibs - ленивый и, вообще-то, даже бесконечный) всё проходит. Алгоритм имеет линейную сложность. | |