Comment bien est 'pur' la programmation fonctionnelle pour routine de base mises en œuvre, par exemple tri de la liste, string matching etc.
Très. Je ferai vos problèmes à Haskell, et je serai un peu bavard à ce sujet. Mon but n'est pas de vous convaincre que le problème peut se faire en 5 caractères (c'est probablement possible en J!), Mais plutôt de vous donner une idée des constructions.
import Data.List -- for `sort`
stdlistsorter :: (Ord a) => [a] -> [a]
stdlistsorter list = sort list
Tri d'une liste à l'aide de la fonction sort
de Data.List
import Data.List -- for `delete`
selectionsort :: (Ord a) => [a] -> [a]
selectionsort [] = []
selectionsort list = minimum list : (selectionsort . delete (minimum list) $ list)
mise en œuvre de tri de sélection.
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
Implémentation de tri rapide.
import Data.List -- for `isInfixOf`
stdstringmatch :: (Eq a) => [a] -> [a] -> Bool
stdstringmatch list1 list2 = list1 `isInfixOf` list2
correspondant à cordes en utilisant la fonction isInfixOf
de Data.list
Il est commun de mettre en œuvre ces fonctions de base au sein de l'interpréteur de base d'une langue fonctionnelle, ce qui signifie qu'ils seront écrits dans un impératif langue (c/C++). Bien que il existe de nombreuses exceptions ..
Dépend. Certaines fonctions sont plus naturellement exprimées impérativement. Cependant, j'espère vous avoir convaincu que certains algorithmes s'expriment naturellement de manière fonctionnelle.
Au moins, je voudrais demander: Comment est difficile à imiter le style impératif tout codage dans « pur » langage fonctionnelle?
Cela dépend de la difficulté de trouver des Monades dans Haskell. Personnellement, je trouve cela assez difficile à saisir.
Vous vous demandez comment il est difficile d'imiter un style tout en écrivant dans un autre? – ShreevatsaR
L'hypothèse selon laquelle un langage fonctionnel sera implémenté en utilisant un langage impératif est suspecte. OCaml est écrit en OCaml, et l'implémentation la plus populaire de Haskell (GHC) est écrite en Haskell. – Chuck
@ShreevatsaR: Peut-être que je devrais reformuler, mais c'est ce que je demande. Il est difficile d'écrire des programmes impératifs tout en codant dans un langage fonctionnel pur sans constructions spéciales comme 'progn', 'do' ... Par exemple, c'est un truc connu que les programmes fonctionnels peuvent imiter l'état 'impératif' avec des fermetures. C'est ce que je voulais savoir. – Bubba88