Linguagem Miranda
Linguagem Miranda
Linguagem Miranda
By fatecf | Studymode.com
4 PARADIGMA FUNCIONAL................................................................................... 7
5 CARACTERSTICAS MAIS MARCANTES DA LINGUAGEM.............................. 8
6 PARALELO COM AS LINGUAGENS: ML, HASKELL......................................... 11
7 EXEMPLOS DE PROGRAMAS............................................................................. 14
8 CONSIDERAES FINAIS................................................................................... 15
BIBLIOGRAFIA......................................................................................................... 16
1 INTRODUO
Miranda uma linguagem de programao funcional desenvolvida por David Turner
na Universidade de Kent Cantbury na Inglaterra. Ela executada em sistemas
operacionais Unix. A linguagem tem como caractersticas principais aavaliao tardia,
tipagem fortemente polimrfica e um sistema de mdulos poderoso. Normalmente
programas escritos em Miranda so de 5 a 15 vezes mais rpidos do que os seus
correspondentes em outras linguagens como C e Java.
O Sistema Miranda proporciona um sistema interativo de programao embutido. Seu
compilador trabalha em conjunto com o editor. O seu sistema de tipos permite que um
alto nmero de erros semnticos seja detectados em tempo de compilao.
2 HISTRICO DA LINGUAGEM
Miranda foi criada para ser uma linguagem funcional mais atraente para o mercado e
para o meio acadmico, oferecendo conceitos antes no disponveis em linguagens
funcionais como abstrao e polimorfismo. Criada pelo Professor Ingls David Turner,
Miranda uma evoluo das SASL e KCR (tambm desenvolvidas pelo Professor
David) usando alguns conceitos de Hope e ML. O projeto de Miranda foi desenvolvido
no laboratrio da Universidade de Kent na Inglaterra entre 1985 e 1986, mas est
atualmente sob o domnio da empresa Researcher Software LTD. que se tornou dona
da marca Miranda. Miranda pode ser utilizada em uma grande gama de aplicaes,
mas suas principais so: prototipao rpida, ensino de linguagens funcionais, como
linguagem de especificao, e pesquisa sobre o paradigma funcional.
3 LIGAO DA LINGUAGEM MIRANDA COM O ARTIGO PROPOSTO
A linguagem de programao Miranda tem como caracterstica ser uma linguagem
fortemente tipada. Isso implica em dizer que cada expresso tem um tipo que pode ser
deduzido em tempo de compilao e qualquer incoerncia na estrutura de dados
alguma funo. Quando se escreve fxy a funo analisada como (fx)y, o que
significa que o resultado da aplicao de f a x uma funo, a qual ento aplicada a
y aplicao feita por associatividade.
A estrutura de dados mais utilizada a lista, que em Miranda escrito com colchetes
e vrgulas.
Exemplo:
week_days = ["Mon", "Tue", "Wed", "Thur", "Fri"]
days = week_days + + ["Sat", "Sun"]
As listas podem ser acrescentadas pelo operador ++ e podem ser subtradas pelo
operador --. Os elementos da lista devem ser todos do mesmo tipo. A forma geral de
uma compresso de lista em Miranda [ body | qualifers ]. Quando se tem uma
sequncia de elementos do tipo misto chamamos de tupla. A tupla escrita usando
parnteses em vez de colchetes. As tuplas, em Miranda so similares aos registros em
Pascal, e no podem ser subscritas. O acesso aos elementos de uma tupla feito por
correspondncia de padro.
5.1 Estrutura de Bloco
Uma equao pode ter vrias alternativas, o que distingue qualequao usar so o
que chamamos de guard que ficam do lado direito da equao, logo depois de uma
vrgula.
Exemplo:
mdc ab = mdc (a-b) b, if a>b
= mdc a (b-a), if a <b
= a, if a = b
permitido introduzir definies locais do lado direito de uma definio, por meio de
uma clusula where.
Os scripts devem ser organizados com uma estrutura de bloco aninhada. obrigatrio
o recuo de blocos internos.
Ao invs de usar guard possvel definir uma funo dando vrias equaes
alternativas, que se distingue pelos padres diferentes nos parmetros formais.
5.2 Avaliao Tardia
A avaliao de Miranda tardia, no sentido de que nenhuma subexpresso avaliada
at que o seu valor seja necessrio. Uma consequncia que possvel definir
funes que no so rigorosas. Outra consequncia dessa avaliao que ela torna
possvel definies de estruturas de dados infinitas (por exemplo, listas infinitas).
5.3 Tipagem
Em Miranda, cada expresso e subexpresso tem um tipo que pode ser deduzido em
fortemente tipada |
Influenciada por | KRC, SASL, ML | ISWIM | Miranda, ML |
Influenciou | Haskell | Haskell, Miranda | C#, Python, F#, Scala |
Paradigma | Funcional | Multi-paradigma: imperativo, funcional | Funcional |
Tipo de Avaliao | Tardia | Normal | Tardia |
Aplicao | Meio acadmico| Bioinformatica, sistemas financeiros | Meio comercial |
Comparao da implementao do Quick Sort em Miranda, ML e Haskell:
MIRANDA | ML | HASKELL |
qsort [] = [] qsort (a:x) = qsort [b|b<-x;b<=a] ++ [a] ++ qsort[b|b<-x;b>a] testdata = f 10 f
n = concat(transpose [[0,2..2*n],[2*n-1,2*n-3..1]]) | fun filter nil elem cmp = nil | filter
(x::xl) elem cmp = if (cmp(x, elem)) then x :: filter xl elem cmp else filter xl elem cmp;fun
quicksort nil = nil | quicksort (pivot::xl) = let val small = filter xl pivot (op <); val medium
= pivot :: filter xl pivot (op =); val large = filter xl pivot (op >); in (quicksort small) @
medium @ (quicksort large) end; | sort :: (Ord a) => [a] -> [a] sort [] = [] sort (pivot:rest)
= (sort [y | y <- rest, y < pivot]) ++ [pivot] ++ (sort [y | y <- rest, y >=pivot]) |
* Estilo de Tipagem
Miranda, ML e Haskell apresentam o estilo de tipagem esttica e so fortemente
tipada. Tendo como base o artigo proposto, dizemos que essas linguagens de
programao possuem tipagem esttica pelo fato de que o tipo de cada expresso
pode ser determinado pelo programa de anlise esttica e que so fortemente tipada
pelo fato de que todas as expresses so do tipo consistente.
* Paradigma
Miranda e Haskell possuem paradigma funcional, por conta disso no apresentam
efeitos colaterais. J ML que possui um multi-paradigma, imperativo e funcional,
apresenta efeitos colaterais.
* Tipo de Avaliao
O tipo de avaliao de Miranda e Haskell o mesmo,que o tipo de avaliao tardia.
Esse tipo de avaliao significa que nenhuma subexpresso avaliada at que o seu
valor seja necessrio. O tipo de avaliao de ML avaliao normal, que significa que
todas as subexpresses so sempre avaliadas.
7 EXEMPLOS DE PROGRAMAS
8 CONSIDERAES FINAIS
Atravs desde trabalho podemos conhecer uma nova linguagem e ter um maior
conhecimento sobre programao funcional. Como visualizamos, a grande aplicao