1) Buono in base a quale standard? Quali proprietà desideri?
Elenco ordinamento? Facile.Facciamolo Quicksort in Haskell:
sort [] = []
sort (x:xs) = sort (filter (< x) xs) ++ [x] ++ sort (filter (>= x) xs)
Questo codice ha il vantaggio di essere estremamente facile da capire. Se la lista è vuota, è ordinata. Altrimenti, chiama il primo elemento x, trova gli elementi minori di x e ordinali, trova elementi maggiori di x e ordinali. Quindi concatena le liste ordinate con x nel mezzo. Prova a rendere questo aspetto comprensibile in C++.
Ovviamente, Mergesort è molto più veloce per l'ordinamento di elenchi collegati, ma il codice è anche 6 volte più lungo.
2) È estremamente facile implementare lo stile imperativo pur rimanendo puramente funzionale. L'essenza dello stile imperativo è il sequenziamento delle azioni. Le azioni sono sequenziate in un contesto puro usando le monadi. L'essenza delle monadi è la funzione di legante:
(Monad m) => (>>=) :: m a -> (a -> m b) -> m b
Questa funzione esiste in C++, e si chiama ;
.
una sequenza di azioni a Haskell, per esempio, è scritto così:
putStrLn "What's your name?" >>=
const (getLine >>= \name -> putStrLn ("Hello, " ++ name))
po 'di zucchero sintassi è a disposizione per rendere questo look più imperativa (ma si noti che questo è il esattamente lo stesso codice):
do {
putStrLn "What's your name?";
name <- getLine;
putStrLn ("Hello, " ++ name);
}
Stai chiedendo quanto sia difficile emulare uno stile mentre scrivi in un altro? – ShreevatsaR
L'ipotesi che un linguaggio funzionale verrà implementato utilizzando un imperativo è sospetto. OCaml è scritto in OCaml e l'implementazione più popolare di Haskell (GHC) è scritta in Haskell. – Chuck
@ShreevatsaR: Forse dovrei riformulare, ma è quello che sto chiedendo. Quanto è difficile scrivere programmi imperativi mentre si codifica in puro linguaggio funzionale senza costrutti speciali come "progn", "do" ... Ad esempio, è un trucco noto che i programmi funzionali possono emulare lo stato "imperativo" con l'uso delle chiusure. Questo è quello che stavo chiedendo. – Bubba88