Você está na página 1de 11

Racket

Alex...,JeffersonAlvesCosta,JosLuiz...

1. (Introduo com histrico, criadores, motivaes para a criao


da linguagem, influncias sobre o projetodalinguagem, campos
ondealinguagemutilizada.)

Na metade do ano 1990, Matthias Fulleisen fundou PLT, um grupo de


pesquisa, depois como um projeto dedicado a produo de materiais
pedaggicosparainiciantes emprogramao.Ogrupodecidiudesenvolverum
ambiente de programao pedaggica baseado em Scheme. A equipe incluiu
Flatt,RobbyFindler, Shriram Krishnamurthi,CormacFlanagan,emuitos outros
produziram o DrScheme, um ambiente de programao para programadores
novatos em Scheme e um ambientedepesquisaporsofttyping.A linguagem
principaldedesenvolvimentoqueDrSchemesuportavaeraPLTScheme.
Em paralelo, o time dava workshopsparaprofessores de ensino mdio,
ostreinandoemprogramdesigneprogramaofuncional.Aopassardosanos,
DrShemefoiganhandoinovaes.

Em2001:
Aequipeprincipal (Felleisen, Findler, Flatt, Krishnamurthi) escreveu epublicou
seu primeiro livro, Como projetar programas (How to Design Programs),
baseadoemsuafilosofiadeensino.

7deJunho,2010:
PLTSchemepassouaserchamadaRacket.

Racket, um de seus objetivos de projeto servir como uma plataforma para


criao de linguagem, design e implementao.
uma linguagem
relativamente nova, que mostra sua origem em
Sc
heme, um dos dois mais
conhecidos dialetos de Lisp
. usado para prpositosgerais de programao,
educao de cincia da computao, pesquisa e scripting. Seu ambiente de
desenvolvimento, DrRacket, escrito em Racket e sua plataforma de
distribuiolivre.


2. (Alinguagememquesto compilada,interpretadaouhbrida?
scriptingouno?)

Racket, uma linguagem altonvel e tem um sistema hbrido, cada expresso ou


definio compilado em um formato bytecode interno usando um compilador JIT, e
entorodanamquinavirtual.
Nomodoiterativo,acompilaoocorreemtempodeexecuo.

3. (Paradigma que a linguagem implementa (se lgico, funcional,


proceidural,etc.))

Racketumalinguagemmultiparadigma:
Funcional: procura fazer as funes ser mais prximas possvel das
funesmatemticaseevitaestadosoudadosmutveis.
Procedural: um paradigma que usa conceitos de chamada de
procedimentos.
Tem a vantagem de reutilizar o mesmo cdigo em diversas partes do
programa, facilidade de organizar o fluxo do programa, ser modular e
estruturado.
Modular: significa que o programa pode ser compilado separadamente
empartes.bomparaprogramasgrandesecomplicados.
Reflexivo: o programa tem a capacidade de analisar e modificar a
estruturaeocomportamentodeumobjetoemtempodeexecuo.
Orientao a objeto: representa conceitos que tem campos de dados e
procedimentosassociadoschamadosmtodos.
Pragramao meta: a escrita de um programa que escreve ou
manipula outros programas, ou ele mesmo,comoseusdadosoufazem
parte do trabalho em tempo decompilaoque seriafeitaemtempode
execuo.
Lgica:baseadanalgicadeprimeiraordem.

4. (Tiposabstratosdedados,orientaoaobjeto)
Tiposabstratosdedados
Umtipoabstratodedados(TAD)especificaumconjuntodedadoseoperaes
queso executadas sobre esses dados. OTADtem o objetivo desimplificaro
algoritmoatravsdaabstraesdasvariveisemumaentidade.

Umaestruturatemadefinio:
(definestructnomedaestrutura(valor1valor2))
onde,
makenomedaestruturaoconstrutorquecriaaestrutura
nomedaestruturavalor1 e nomedaestruturavalor2 so seletores que extraem
valor1evalo2,respectivamente.

Ex:
(definestructstructagenda(nometelefone))
(defineagenda(makestructagenda'eu'32940568))

>(structagendanomeagenda)
eu
>(structagendatelefoneagenda)
32940568

Orientaoaobjeto
Parasetrabalharcom orientaoaobjeto,oprogramadortemquedeclararno
DrRacketabibliotecaracket/class.
Uma class (classe) contm uma coleo de mtodos, campos que tm
expressesdevaloresiniciaisevaloresqueiniciamosargumentos.
Nesse contexto, um objeto uma coleo de vinculaoporcamposque so
instanciadosdeacordocomadescriodaclasse.

5. (Operadores.)
Tiposprimitivosdedados:
numeros
integers(ex:1,4,3,0)
floats(ex:0.0,3.5,1.23E+10)
rationals(ex:2/3,5/2)
simbolos(ex:fred,x,a12,set!)
boleano:Racketusasimbolosespeciaspararepresentarverdadeiro#t
oufalse#f.
strings(ex:"helloword")
caracteres(ex#\c)
CaseissignificantinRacketforsymbols.(Itisn'tsignificantforsymbolsinthe
R5RSSchemestandard,whichmeansitisn'tsignificantforvariablenames.)
Recommendation:writeyourprogramssothattheyworkcorrectlywhetheror
notcaseissignificantinsymbols.Notethatyoucanhavenonalphanumeric
characterssuchas+oror!inthemiddleofsymbols.(Youcan'thave

parentheses,though.)
Aquiestoalgumasdasfunesbasicasqueschemeproporcionaparaostipos
acima.
FunoesAritmticas(+,,*,/,abs,sqrt)
Relacional(=,<,>,<=,>=)(fornumbers)
Relacional(eq?,eqv?,equal?)paradadosarbitrrios
Logicos(and,or,not):andeorsofunoesdecurtocircuito.
Somefunctionsare
predicates
,thatis,theyaretruthtests.InRacket,they
return#for#t.
number?integer?pair?symbol?boolean?string?
eqv?equal?
=<><=>=

6. (Escopo)
O escopodeumavinculaooconjuntodeformasdeorigemaqueseaplica.
Oambientedeumaformaoconjuntodeligaes,cujoescopoincluiaforma.

7. (Expresses,estruturasdecontrole,desviocondicional.)

Ummdulodoprogramaescritocomo
#lang<langname><topform>
<topform>uma<definio>ouuma<expr>.

Por conveno, * em uma gramtica significa zero ou mais repeties do


elemento de procedimento, o + significa uma ou maisrepetiesdo elemento
deprocedimento,e{}agrupaumasequnciacomoumelementoderepetio.
Umadefiniotemaforma(define<id><expr>),
vincula <id> para o resultado de <expr>, enquanto ( define ( <id> <id>* )
<expr>+ ) vincula o primeiro <id> para a funo(chamada tambm de
procedimento) que pega como argumentos nomeados pelos restantes <id>s.
No caso dessa funo, as <expr>s so ocorpodafuno.Quandoafuno
chamada,retornaoresultadodaltima<expr>.
Umcomentrio,seiniciacomevaiatofimdalinha.

Exemplos:
(definex3)definexparaser3

(define(xstr)definexcomoumafunodeumargumento
(substringstr0x)

>x
3
>(xmeucarro)
meu
#notao#

Agramticaparaautilizaodeumaformasintticaalgoapresentadoassim:

(Algo[Id+...]anexpr...)

usando a sintaxe dos identificadores racketes mostra que as variaveis em


italicoIdeanexprsometavariaveis.
A conveno de nomenclatura define implicitamente o significado de muitas
metavariveis:

*Ametavarivel quetermina em idrepresenta um identificador, como x


oumyfavoritemartian.

*Um identificador de meta que termina em keyword representa uma


palavrachave,como#:tag.

*Um identificador de meta que termina com expr representa qualquer


subformulrio,eelevaiseranalisadocomoumaexpresso.

*Um identificador de meta, que termina com o body significa qualquer


subformulrio,queseranalisadotantocomoumadefinio
localouumaexpresso. Um bodypode analisarcomoumadefinios
senoforprecedidadequalquerexpresso,eoltimobody

deveserumaexpresso.

Colchetes na gramtica indicam uma seqncia entre parnteses de formas,


ondeoscolchetesporconvenosoutilizados.

Um ... indica zero ou mais repeties da forma anterior, e... + indica uma ou
maisrepetiesdoqueopontodereferncia
anterior. Caso contrrio, os identificadores noitlico representam a si
mesmos

Combasenagramticaacima,ento,aquiestoalgunsusosconformidade.


(Algo[X])
(Algo[X](+12))
(Algo[Xmyfavoritemartianx](+12)#F)

Algumas especificaes sintticoformulrio referemse a metavariveis


que
nosoimplicitamentedefinidosenopreviamente
definido. Metavariveis
como so definidos aps a forma principal, utilizando
umformatoBNFcomoalternativas:

(Algoelse[thing+...]anexpr...)

thing=thingid
|thingkeyword

O exemplo acima diz que, dentro de uma forma somethingelse, uma thing
umidentificadorouumkeyword.

*Expressesregulares*

A regexp encapsula um valor padro que descrita por uma corda ou


barbantebyte.
O combinador regexp tentacorresponderaessepadro contra(aparte)outra
stringoustringbyte,
quevamoschamar de seqnciadetexto,quandovocchamafunescomo
regexpmatch.
Aseqnciadetextotratadocomotextopuro,enocomoumpadro.

1.AescritadepadresRegexp

uma string ou um byte stringpode ser usado diretamentecomopadro


regexp,

oupode serprefixado com#Rxparaformarumvalorliteral regexp.Por


exemplo,#rx
"abc" um valor destringbaseado em regexp e # rx#"abc" umvalor

destringbytebaseadoemregexp.
Alternativamente, umastringoubytestringpode serprefixadocom#Px
,Comoem#px"abc",
porumasintaxeligeiramentealargadodepadresdentrodastring.
A maioria dos caracteres em uma regexp padro so feitos para combinar
ocorrnciasde
si na seqncia de texto . Assim, o padro # rx "abc" corresponde a
umastringquecontmos
caracteres a , b , c em sucesso. Outros caracteres agem como
metacaracteresealgumassequncias
de caracteres atua como metassequncias. Ou seja, eles especificam
algoliteraisdiferentedesimesmos.
Por exemplo, no padro # rx "a.c", os caracteres a e c se por si
mesmos,masometacharacter
.
podecorresponderaqualquercaractere.
Portanto, opadro#rx"a.c"correspondea a,Qualquercaractere,ec
emsucesso.

Estruturasdecontrole
If
Temaforma(if<expr1><expr2><expr3>)
<expr1>=expressodotestedacondio
<expr2>=entoexpr
<expr3>=senoexpr
Exemplo:
>(if(>56)maiormenor)
menor
>(if(=56)"iguais""diferentes")
diferentes

Andeor
Soavaliaescurtocircuitoetmasformas:
(and<expr>*)
(or<expr>*)

Exemplos:
>(and(=56)(<56))
#f

>(or(=56)(<56))
#t

Cond

Temaforma:(cond{[<expr><expr>*]}*)
Testa de condio em condio, se alguma verdadeira, no testa as outras
condies.
Exemplo:
>(cond
[(=56)"iguais"]
[(>56)"maior"]
[(<56)"menor"])

menor

8. (Subprogramas.)

9. (Hsuporteconcorrncia(programaoparalela)?)

Racketsuporta mltiplas threadsde controle dentrodeumprograma,o


armazenamento local de segmento, alguns mecanismos primitivos de
sincronizao, e um quadro para compor abstraes de sincronizao.
Alm disso, as bibliotecasracket/futureeracket/placefornecemsuporte
paraparalelismoparamelhorarodesempenho.

10. (Exemplo a ser implementado: o problema clssico dos Nmeros


deLucas.)

#langracket
(define(lucasnum)
(cond
[(=num0)2]
[(=num1)1]
[else(+(lucas(num1))(lucas(num2)))]))

(definemax10001)
(definemin1)
(for([i(inrangeminmax)])
(display(lucasi))
(printf""))

11. Sistemadetipos
Sistemadetipos

Booleanos
#t para verdadeiroe#fparafalso.Emcondicionais,ososvaloresno#fso
tratadoscomoverdadeiro.
Ex:
>(=4(+22))
#t
Oprocedimentoboolean?Reconheceasduasconstantesbooleanas.
Ex:
>(boolean?nao)
#f

Nmeros
Soescritosdojeitousual,incluindofraesenmerosimaginrios.
Inteiro:1
Racional:
Complexo:1+2i
Pontoflutuante:3.14e6.05e+23
Exemplos:
>0.5
0.5
>#e0.5

Caractereres
Caracter corresponde a uminteiro,otipocaracterseparadodosnmeros.Os
procedimentos char>integer e integer>char converte entre nmeros de valor
escalareocaractercorrespondente.
Exemplos:
>(integer>char65)
#\A
>(char>integer#\A)
65

String
Uma string um vetor de caracteres de tamanhofixado e so escritas entre
aspasduplas.
Ex:
>Banana
Banana

Bytes
um inteiro exato entre 0 e 255. O procedimento byte? analisa se byte ou

no.
Ex:
>(byte?4)
#t
>(byte?300)
#f

Smbolos
um valor que vem depos de e o procedimento symbol? Verifica se um
smbolo,retornandoverdadeiro(#t)oufalso(#f).
Exemplos:
>x
x
>(symbol?x)
#t
>(symbol?5)
#f

Palavraschave
igualasmbolosqueimprimecomprfixo#:
Ex:
>(string>keywordbanana)converteastringparapalavrachave
#:banana

Pares
Sodoisvaloresquesocombinadoscomoprocedimentocons.
Ex:
>(cons24)
Imprimecolocandonocomeoe.entreospares
(2.4)
>(car(cons24)) Procedimentocarimprimeoprimeirovalordopar
2
>(cdr(cons24)) Procedimentocdrimprimeosegundovalordopar
4
>(pair?(cons24)) Procedimentopairverificaseumpar
#t

Listas
Combinaodosparesqueformamumalistaligada.
Ex:
>(cons0(cons1(cons2null)))
(012)
Procedimentolist?verificaseumalista,retorna#tou#f.

>(list?(cons24))
#f

Vectors
Umvectorumarraydetamanhofixo.
Ex:
>#(xyz)
#(xyz)

Você também pode gostar