Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Haskell
Wiki community
Recent changes
Random page
HaskellWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Pt/Introdução
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Quais as vantagens da programação funcional?== Planilhas e SQL são ambos linguagens razoavelmente especializadas. Linguagens de programação funcional seguem as mesmas idéias das linguagens de propósito geral. Para se ter uma idéia de como é uma linguagem de programação funcional, vamos olhar os seguintes programas quicksort. Ambos ordenam uma sequência de números em ordem ascendente usando um método padrão chamado "quicksort". O primeiro programa é escrito em Haskell e o segundo em C. Considerando que o programa C descreve os todos os passos de como a máquina deve fazer para realizar a ordenação - a maior parte código lida com os detalhes de baixo nível da manipulação de dados - o programa Haskell codifica o algoritmo de ordenação em um nível muito mais alto, melhorando a velocidade e clareza do resultado. ===Quicksort em Haskell=== <haskell> qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) </haskell> ===Quicksort em C=== <pre> void qsort(int a[], int lo, int hi) { { int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do { while ((l < h) && (a[l] <= p)) l = l+1; while ((h > l) && (a[h] >= p)) h = h-1; if (l < h) { t = a[l]; a[l] = a[h]; a[h] = t; } } while (l < h); t = a[l]; a[l] = a[hi]; a[hi] = t; qsort( a, lo, l-1 ); qsort( a, l+1, hi ); } } </pre> Uma [[/Direct Translation | tradução semi-direta]] de C pode ser acessada aqui. Vamos examinar alguns dos benefícios de Haskell e programaçao funcional. Um caso mais detalhado para programação funcional pode ser encontrado em <BLOCKQUOTE> [http://www.md.chalmers.se/~rjmh/Papers/whyfp.html '''Why Functional Programming Matters'''] por [http://www.md.chalmers.se/~rjmh/ John Hughes], The Computer Journal, Vol. 32, No. 2, 1989, pp. 98 - 107. Also in: David A. Turner (ed.): Research Topics in Functional Programming, Addison-Wesley, 1990, pp. 17 - 42. </BLOCKQUOTE> A slightly less formal essay inspired by the paper above can be found in Um ensaio pouco menos formal inspirado pelo paper acima pode ser encontrado em <BLOCKQUOTE> [[Why Haskell matters |'''Why Haskell Matters''']] originally by [mailto:sylvan@dtek.chalmers.se Sebastian Sylvan] </BLOCKQUOTE> ===Tamanho reduzido=== Programas funcionais tendem a ser muito mais '''concisos''' do que os seus homólogos imperativos. Quicksort é um caso extremo sim, mas em geral programas funcionais são muito mais curtos (por um fator de dois pra dez). ===Fácil compreensão=== Functional programs are often easier to '''understand'''. You should be able to understand the program without any previous knowledge of either Haskell or quicksort. The same certainly cannot be said of the C program. It takes quite a while to understand, and even when you do understand it, it is extremely easy to make a small slip and end up with an incorrect program. Here is a detailed explanation of the Haskell quicksort: Programas funcionais são muitas vezes mais fáceis de '''entender'''. Você deve ser capaz de entender o programa sem qualquer conhecimento prévio de Haskell ou quicksort. O mesmo, não se pode dizer do programa C. Demora um pouco para entender, e mesmo quando você faz compreendê-lo, é extremamente fácil de fazer um pequeno deslize e acabar com um programa incorreto. Aqui está uma explicação detalhada do Haskell quicksort: <haskell> qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs) </haskell> A primeira linha lê-se: <p>"Quando você classifica uma lista vazia (<tt> [] </tt>), o resultado é uma outra lista vazia".</p> <p>A segunda linha diz: "Para ordenar uma lista cujo primeiro elemento é chamado <tt> x </tt> e o resto do que é chamado <tt> xs </tt>, classificar os elementos de <tt> xs </tt>, que são menos de <tt> x </tt>, classificar os elementos de <tt> xs </tt>, que são iguais ou superiores a <tt> x </tt>, e concatenar (<tt> + + </tt>) os resultados, com <tt> x </ tt> colada no meio. "</p>
Summary:
Please note that all contributions to HaskellWiki are considered to be released under simple permissive license (see
HaskellWiki:Copyrights
for details). If you don't want your writing to be edited mercilessly and redistributed at will, then don't submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!
Cancel
Editing help
(opens in new window)
Toggle limited content width