Насколько хорош «чистый» функционал?
программирование для основной рутины
реализации, например сортировка списка,
сопоставление строк и т. д .?
Очень. Я сделаю твои проблемы в Хаскеле, и я буду немного многословен об этом. Моя цель состоит не в том, чтобы убедить вас, что задача может быть решена в 5 символов (возможно, в J!), А в том, чтобы дать вам представление о конструкциях.
import Data.List -- for `sort`
stdlistsorter :: (Ord a) => [a] -> [a]
stdlistsorter list = sort list
Сортировка списка с использованием функции sort
из Data.List
import Data.List -- for `delete`
selectionsort :: (Ord a) => [a] -> [a]
selectionsort [] = []
selectionsort list = minimum list : (selectionsort . delete (minimum list) $ list)
Реализация сортировки выбора.
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) =
let smallerSorted = quicksort [a | a <- xs, a <= x]
biggerSorted = quicksort [a | a <- xs, a > x]
in smallerSorted ++ [x] ++ biggerSorted
Быстрая реализация сортировки.
import Data.List -- for `isInfixOf`
stdstringmatch :: (Eq a) => [a] -> [a] -> Bool
stdstringmatch list1 list2 = list1 `isInfixOf` list2
Соответствие строк с использованием функции isInfixOf
из Data.list
Обычно реализуют такие базовые
функции в базовом интерпретаторе
любого функционального языка, который
означает, что они будут написаны в
императивный язык (с / с ++). Хотя
Есть много исключений ..
Зависит. Некоторые функции более естественно выражены императивно. Тем не менее, я надеюсь, что убедил вас, что некоторые алгоритмы также выражены естественным образом функциональным образом.
По крайней мере, я хочу спросить: насколько сложно
это подражать императивному стилю
при кодировании в «чистый» функционал
язык
Это зависит от того, как сильно вы находите Монады в Хаскеле. Лично мне трудно понять.