Você está na página 1de 7

Linguagem miranda

By fatecf | Studymode.com

PONTFICIA UNIVERSIDADE CATLICA DE MINAS GERAIS


Graduao em Cincia da Computao
Felcio Jnior
Jnatas Sena
Patrick Flvio Teixeira Coura
Rafael Lopes Barbosa
rsula Rosa Monteiro de Castro
MIRANDA
Belo Horizonte
2012
Felcio Jnior
Jnatas Sena
Patrick Flvio Teixeira Coura
Rafael Lopes Barbosa
rsula Rosa Monteiro de Castro
MIRANDA
Trabalho apresentado disciplina de Linguagens de Programao, do curso de
Cincia da Computao da Pontifcia Universidade Catlica de Minas Gerais.
Professor: Marco Rodrigo Costa
Belo Horizonte
2012
SUMRIO
1 INTRODUO....................................................................................................... 4
2 HISTRICO DA LINGUAGEM.............................................................................. 5
3 LIGAO DA LINGUAGEM MIRANDA COM O ARTIGO PROPOSTO.............. 6

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

acusado em uma mensagem de erro em tempo de compilao. Este tipo de tipagem


esttica permite a deteco precoce de erros de tipo e com isso permite melhor
eficincia naexecuo do programa. O programador assim consegue fazer um
programa mais estruturado e de fcil legibilidade.
O usurio ao programar nesta linguagem consegue definir novos tipos, e este tipo
pode ser polimrfico. De acordo com o artigo lido a noo de polimorfismo pode conter
variveis de tipos que so instanciados para tipos diferentes o que torna possvel
especificar as informaes de tipo parcial que podem ser usados em instancias desses
tipos.
Miranda faz parte de uma gerao de linguagem moderna onde a abstrao de dados
oferece uma maneira de melhor organizao de dados.
4 PARADIGMA FUNCIONAL
O paradigma de programao funcional, baseado em funes matemticas a base
de projeto de um dos mais importantes estilos de linguagens de programao no
imperativas.
As funes matemticas so correspondncias biunvocas de membros de um
conjunto, chamado conjunto domnio, com outro, o conjunto imagem. Uma das
principais caractersticas das funes matemticas a ordem com que suas
expresses de avaliao, elas so controladas por recurso e por expresses
condicionais, no de acordo com a sequncia ou repetio interativa, como ocorre em
linguagens imperativas. Outra caracterstica marcante est relacionada manipulao
de valores: ao contrrio da proposta de linguagens imperativas de manipulao e
operaes com valores na memria a fim de gerar um resultado, as linguagens
funcionais sempre retornam o mesmo valor dado um determinado parmetro, de modo
que no haja qualquer efeito colateral no resultado final, isso denotado por
transparncia referencial, e torna a semntica da linguagem funcional mais simples do
que as imperativas.
Uma linguagem puramente funcional no utiliza variveis ou instrues deatribuio.
Isso evita de que o programador tenha que se preocupar com as clulas de memria
do computador que esteja utilizando.

5 CARACTERSTICAS MAIS MARCANTES DA LINGUAGEM


Miranda puramente funcional no h efeitos colaterais. Um programa, em Miranda
chamado de script, um conjunto de equaes que definem vrias funes e
estruturas de dados. A ordem em que as equaes so dadas no significativa em
geral. Embora a linguagem seja fortemente tipada, no h declaraes de tipo
obrigatrio. Miranda permite tipos polimrficos.
Miranda uma linguagem totalmente de ordem superior, ou seja, funes podem ser
passadas como parmetros para outras funes, ou retornadas como o resultado de

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

tempo de compilao. Os scripts podem conter declaraes de tipo, que so escritas


usando :: para dizer do tipo.
O compilador sempre capaz de deduzir o tipo de um identificador de sua equao de
definio, por isso no necessrio declarao de tipo.
O programador pode introduzir novos tipos, fazendo uso de ::=. Sendo que os tipos
definidos por ele podem ser polimrficos. Para analisar um objeto definido pelo
programador, utiliza correspondncia de padro. Estes tipos definidos pelo
programador so chamados de tipos algbricos, eles incluem tipos bsicos de
enumerao.
Todos os tipos bsicos de Miranda tambm poderiam serdefinidos usando ::=.
O programador pode introduzir um novo nome para um tipo j existente, usando ==.
5.4 Tipos Abstratos de Dados
Miranda permite a definio de tipos abstratos de dados, cuja implementao fica
escondida do resto do programa.
Exemplo:
abstype stack *
with empty :: stack *
isempty :: stack * -> bool
push :: * -> stack * -> stack *
pop :: stack * -> stack *
top :: stack * -> *
stack * == [*]
empty = [ ]
isempty x = (x=[ ])
push a x = (a:x)
pop (a:x) = x
top (a:x) = a
A definio de um tipo abstrato de dados consiste de duas partes. Primeira parte a
declarao da forma abstype..with.., onde chamado a assinatura do tipo abstrato. A
segunda parte o conjunto de equaes que ligam os nomes introduzidos na
declarao abstype. Funciona da seguinte forma, o compilador verifica as equaes
de implementao do tipo abstrato e sua representao e os trato como sendo do
mesmo tipo. Em todo resto do programa, o tipo e sua representao abstrata so
tratados como dois tipos distintos.
6 PARALELO COM AS LINGUAGENS: ML, HASKELL
| MIRANDA | ML | HASKELL |
Surgiu em | 1985 | 1973 | 1990 |
Criado por | David Turner | Robin Milner | Simon Peyton-Jones, Paul Hudak, et al. |
Estilo de tipagem | Esttica, fortemente tipada | Esttica, fortemente tipada | Esttica,

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

da linguagem Miranda atualmente tem sido no aprendizado de linguagens funcionais.


Conseguimos observar que este tipo de programao tem um bom tratamento para
erros, porm seu consumo de memria relativamente alto. Ao ver todas as
caractersticas desta linguagem chega-se a concluso que se trata de uma tima
ferramenta acadmica podendo ser uma boa ferramenta tambm para o meio
comercial.
BIBLIOGRAFIA
Artigo:
TURNER, David. An Overview of Miranda. Disponvel em
<http://www.cs.kent.ac.uk/people/staff/dat/miranda/overview.pdf>
<http://hudsoncosta.files.wordpress.com/2011/05/programacao_funcional.pdf>
Acessado em 11/09/2012
Livro:
SEBESTA, Robert W. Conceitos de linguagens de programao. 4. ed. Porto Alegre:
Bookman, 2000.
Sites:
<http://miranda.org.uk/> Acessado em 11/09/2012
<http://en.wikipedia.org/wiki/Haskell_(programming_language)>Acessado em
17/10/2012
<http://www.haskell.org/haskellwiki/Haskell_em_10_minutos#Informa.C3.A7.C3.A3o_e
struturada> Acessado em 17/10/2012
<http://en.wikipedia.org/wiki/ML_(programming_language) > Acessado em 17/10/2012
<http://en.wikipedia.org/wiki/Miranda_(programming_language)> Acessado em
17/10/2012