Lenguajes y Paradigmas

22
Lenguajes de programación Una lista parcial de algunos de los lenguajes de programación más importantes, junto con su año de creación: 1957 FORT R! 195" #$O# 19%& #isp 19%& 'O(O# 19%) *# 19%) +-U# 19%. (+' 19%. *#/ 197& *rolog 197) ' 1975 *ascal 1975 +c0eme 1975 -odula 19" +malltal23"& 19" O4jectie3' 19" da 19"% '66 19"% i88el 19"7 *erl 19"" Tcl/T2 199& as2ell 1991 *t0on 199 Ru4 1995 ;aa

Transcript of Lenguajes y Paradigmas

Page 1: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 1/22

Lenguajes de programaciónUna lista parcial de algunos de los lenguajes de programación más importantes, junto consu año de creación:

• 1957 FORTR !• 195" #$O#

• 19%& #isp

• 19%& 'O(O#

• 19%) *#

• 19%) + -U#

• 19%. ( + '

• 19%. *#/

• 197& *rolog

• 197) '

• 1975 *ascal

• 1975 +c0eme

• 1975 -odula

• 19" +malltal23"&

• 19" O4jecti e3'

• 19" da

• 19"% '66

• 19"% i88el

• 19"7 *erl

• 19"" Tcl/T2 • 199& as2ell

• 1991 * t0on

• 199 Ru4

• 1995 ;a a

Page 2: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 2/22

• 1995 * *

• )&&& '<

l principio, los lenguajes se diseña4an =nicamente para poder ejecutar los programase8icientemente> #os ordenadores, car?simos, eran el recurso cr?tico, los programadoreseran 4astante 4aratos> Un lenguaje de alto ni el ten?a @ue ser competiti o con la ejecuciónde un código en ensam4lador> mediados de los años %&, cuando se 0a4?an diseñadoFORTR !, 'O(O#, # +* #$O#, ;o0n (ac2us Acreador de FORTR !B se dio cuenta@ue la programación esta4a cam4iando> #as má@uinas eran menos caras, el coste de la

programación esta4a aumentando, aparec?a la necesidad de mo er o migrar los programasde unas estaciones a otras, surg?a la necesidad de lle ar un 4uen mantenimiento de los

programas resultantes> l o4jeti o de un lenguaje de alto ni el se trans8ormó no sólo en enejecutar los programas e8icientemente, sino tam4iCn en 8acilitar el desarrollo de programas

para resol er pro4lemas en determinadas áreas de aplicación>

#a tecnolog?a de los ordenadores maduró entre 19%& 197& los lenguajes se centraron enresol er pro4lemas espec?8icos de un dominio> #os programas cient?8icos generalmente seimplementa4an en FORTR !, las aplicaciones para los negocios en 'O(O#, lasaplicaciones militares en ;OD #, las de inteligencia arti8icial en # +* las militaresinternas en da> l igual @ue sucede con los lenguajes naturales, los lenguajes de

programación a eces dejan de usarse> #$O# no se utiliEa desde los años %&, sereemplaEó por *ascal, el cual se reemplaEó a su eE por '66 ;a a> 'O(O#, @ue seutiliEa4a para las aplicaciones mercantiles, se sustitu ó tam4iCn por '66>

#os primeros lenguajes @ue toda ?a se usan tienen re isiones periódicas para re8lejarin8luencias de otras áreas de computación> #enguajes como ;a a, '66 -# re8lejan unagran e periencia o4tenida en el diseño uso de los cientos de lenguajes antiguos> lgunasde esas in8luencias son:

• Recursos del ordenador : la e olución de los ordenadores desde los años 5&, juntocon los modernos sistemas operati os, 0an in8luenciado las caracter?sticas de loslenguajes de alto ni el>

• Aplicaciones : el uso de los ordenadores se 0a e tendido rápidamente desde lasaplicaciones militares, cient?8icas de negocios a los juegos, los ordenadores

personales, internet cual@uier aplicación cotidiana>

• Métodos de programación : el diseño de los lenguajes tiene @ue re8lejar los 4uenosmCtodos para implementar programas grandes complejos>

• Estudios teóricos : $racias a la in estigación durante más de 5& años en el diseño eimplementación de lenguajes, se conocen los puntos 8uertes dC4iles de lascaracter?sticas de los mismos, por lo @ue in8lu e en el diseño de los nue oslenguajes>

• Estandarización : cada eE más e iste la necesidad de @ue los programas sean porta4les de unos sistemas a otros>

Page 3: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 3/22

pesar de la enorme lista de lenguajes de programación @ue 0an ido apareciendo, la ma or parte de los programadores sólo utiliEan unos pocos lenguajes> demás, los programadoresa menudo tra4ajan en empresas o instalaciones donde se tra4aja con un =nico lenguaje en

particular, como ;a a, ' o da> ntonces, por @uC es importante el estudio de di8erenteslenguajes o paradigmas cuando al 8inal sólo se tra4ajará con unos pocos> a muc0as

raEones @ue justi8ican su estudio, entre las cuales las más importantes son:• Mejora el uso del lenguaje de programación : si se conoce cómo están

implementadas las caracter?sticas en un lenguaje de programación, se mejorará la0a4ilidad para escri4ir programas e8icientes> *or ejemplo, si se conoce cómo crear manipular listas o cadenas en un lenguaje, por ejemplo +c0eme, utiliEando recursiónse conseguirá construir programas más e8icientes>

• Incrementa el vocabulario de los elementos de programación >

• Permite una mejor elección del lenguaje de programación : l conocimiento dedi ersos lenguajes de programación 8acilitan la elección del lenguaje más adecuado

para un pro ecto determinado>

• Mejora la habilidad para desarrollar programas efectivos y eficientes : -uc0oslenguajes proporcionan caracter?sticas @ue, cuando se utiliEan correctamente,aportan muc0os 4ene8icios a la programación pero, cuando se 0ace un usoincorrecto, pueden ocasionar un gran coste computacional> l ejemplo t?pico es larecursión , @ue permite una implementación elegante e8iciente de 8unciones> *erocuando no se sa4e utiliEar, puede ocasionar un aumento e ponencial del tiempo deejecución>

• acilita el aprendizaje de un nuevo lenguaje de programación : 'uando se conocenlas estructuras, tCcnicas de implementación construcciones de un lenguaje, es

muc0o más sencillo aprender un nue o lenguaje de programación @ue tengaestructuras similares>

• acilita el dise!o de nuevos lenguajes de programación : s posi4le @ue en un8uturo tengan @ue diseñar ustedes un lenguaje @ue se adapte a uestras necesidades>'uantos más lenguajes paradigmas se conoEcan, más sencillo resultará el diseño la implementación>

#a 0istoria de los lenguajes de programación es din"mica se encuentra en continuae pansión> l gran n=mero de lenguajes de programación @ue 0an aparecido desde los años%& 0asta la actualidad no son ni muc0o menos los =nicos @ue aparecerán en un 8uturo>

continuación tenemos una lista e traida de freshmeat donde se puede er el n=mero de pro ectos acti os 4asados en cada lenguaje de programación en la actualidad>

• da A%7 projectsB• *# A projectsB

• +* A.7 projectsB

Page 4: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 4/22

• ssem4l A)7) projectsB

• G2 A%" projectsB

• (asic A 9 projectsB

• ' A9)9% projectsB• '< A .. projectsB

• '66 A5)&7 projectsB

• 'lipper A1 projectB

• 'old Fusion A)5 projectsB

• 'ommon #isp A%7 projectsB

• H A15 projectsB

• Help0i A"& projectsB

• H lan A) projectsB

• i88el A 5 projectsB

• macs3#isp A%% projectsB

• rlang A 9 projectsB

• uler A1 projectB

• up0oria A1& projectsB

• Fort0 A)9 projectsB

• Fortran A9. projectsB

• $am4as A11 projectsB

• $roo A.) projectsB

• as2ell A7% projectsB

• ;a a A% 7 projectsB• ;a a+cript A1)%& projectsB

• #isp A"" projectsB

• #ogo A% projectsB

• #ua A%& projectsB

Page 5: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 5/22

• -# A projectsB

• -odula A" projectsB

• O4ject *ascal A 5 projectsB

• O4jecti e ' A 9& projectsB• O'aml A9" projectsB

• Ot0er A 1& projectsB

• Ot0er +cripting ngines A17 projectsB

• *ascal A% projectsB

• *erl A "1% projectsB

• * * A.5)1 projectsB

• *i2e A1 projectsB

• *#/+I# A95 projectsB

• *liant A1 projectB

• *RO$R ++ A. projectsB

• *rolog A). projectsB

• * t0on A ) projectsB

• R #4asic A1. projectsB

• Re4ol A projectsB

• Re A11 projectsB

• Ru4 A51) projectsB

• +c0eme A151 projectsB

• +imula A1 projectB

• +malltal2 A). projectsB• +I# A5%5 projectsB

• Tcl A5) projectsB

• Uni +0ell A1119 projectsB

• Disual (asic A.9 projectsB

Page 6: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 6/22

• J(asic A1 projectB

• K '' A ) projectsB

• Lope A." projectsB

'uando los lenguajes de programación empeEaron a aparecer, los creadores normalmenteeran entidades o empresas> o en d?a es di8erente, cual@uier in8ormático puede crear unlenguaje nue o en un momento dado @ue precise ciertas caracter?sticas en concreto> *orejemplo, tenemos el caso de Ruby, un lenguaje de programación ideado en 199 por un

jo en japonCs llamado Ku2i0iro -atsumoto> Iuiso crear un lenguaje donde la programación 8uncional la imperati a estu iese 4alanceada> !ecesita4a además @ue 8ueseun lenguaje de script más potente @ue *erl más orientado a o4jetos @ue *0 ton>

l nom4re de Ru4 se decidió entre Ku2i0iro Meiju s0itsu2a en 199 en una sesiónonline de c0at, antes de @ue se 0u4iese implementado el código> +e propusieron dosnom4res, Ru4 'oral, al 8inal decidieron Ru4 por@ue era la piedra del Eodiaco de unode sus colegas>

#a primera ersión p=4lica Ru4 &>95 se anunció en un grupo de noticias domCsticas en;apón en diciem4re de 1995> continuación se lanEaron tres ersiones más se creó elgrupo de noticias ruby#list > #a ersión Ru4 1>& apareció en diciem4re de 199%, la ersión1> en 1999 la 1>">7 en junio de )&&"> #a =ltima ersión @ue se 0a lanEado Ru4 1>9>1 0asido el )5 de nero de )&&9>

Ru4 es un lenguaje orientado a o4jetos pero multiparadigma: esto @uiere decir @ue en ru4cada tipo de dato es un o4jeto cada 8unción es un mCtodo, pero permite programaciónimperati a 8uncional AmultiparadigmaB>

Un ejemplo de programación en Ru4 :

puts "Hello World!"

Otro ejemplo:

puts "What's your favorite number?"number = gets.chompoutput_number = number.to_i + puts output_number.to_s + ' is a bigger and better favorite number.'

No son lenguajes de programación:

isten elementos mu usados por los in8ormáticos @ue tienen algunas de las caracter?sticasde los lenguajes de programación, pero @ue no lo son> Deamos alg=n ejemplo>

#os lenguajes J-#, uno de los estándares más usados por las aplicaciones in8ormáticas para compartir datos, son lenguajes escritos con una sinta is per8ectamente de8inida> *orejemplo, el siguiente te to en un lenguaje J-# para de8inir una lista de persones:

Page 7: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 7/22

? ml version=" .#" encoding="$%& ("?)!* ,%- / people_list 0-0%/1 "e ample.dtd")people_list)

person) name)&red 2loggs 3name) birthdate)453 34##( 3birthdate) gender)1ale 3gender) 3person) person) name)1ary 2aggins 3name) birthdate) 43#53 674 3birthdate) gender)&emale 3gender) 3person)

3people_list)

+in em4argo le 8alta una caracter?stica 8undamental para poder ser considerado un lenguajede programación: no de8ine un comportamiento, no tiene una semántica asociada> l troEode código anterior no puede ser ejecutado tal cual en un computador, sino @ue =nicamentede8ine un conjunto de datos>

Un entorno de programación isual para de8inir comportamientos animaciones es otroejemplo de algo @ue no es estrictamente un lenguaje de programación> *or ejemplo +cratc0 es un lenguaje isual desarrollado por el - T para promo er el interCs por la programaciónentre los jó enes>

l ejemplo anterior de8ine una animación de un sprite en la pantalla> Otros entornos o0erramienta similar es el Adobe $irector , @ue permite diseñar animaciones multimedia>N#os podemos considerar lenguajes de programación +i lo consideramos de una 8ormaestricta, no> !o son lenguajes te tuales, los programas no se pueden escri4ir en un 8ic0erode te to> Tampoco tienen elementos 8undamentales de los lenguajes de programación como

son las 8unciones los tipos de datos> un@ue, por otro lado, si consideramos de una 8ormamás amplia el concepto de 8unción, s? @ue e isten elementos en esos lenguajes @ue

posi4ilitan la creación de a4stracciones reutiliEa4les en distintos programas>

*odr?amos decir @ue son 0erramientas de programación de animaciones @ue utiliEan ciertascaracter?sticas de los lenguajes de programación>

Características de los lenguajes de programación

N'uáles son estas caracter?sticas

+eg=n la de8inición de la Encyclopedia of %omputer &cience A nc clopedia o8 'omputer+cience, .t0 dition, nt0on Ralston A ditorB, dGin H> Reill A ditorB, Ha id

emmendinger A ditorB, Pile , )&&&> Hisponi4le en la 4i4lioteca politCcnica conidenti8icador: *O R&/ / / !'/R #B:

'A programming language is a set of characters( rules for combining them( and rules specifying their effects )hen e*ecuted by a computer( )hich have the follo)ing fourcharacteristics+

Page 8: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 8/22

,- It re.uires no /no)ledge of machine code on the part of the user 0- It has machine independence

1- Is translated into machine language

2- Employs a notation that is closer to that of the specific problem being solved than ismachine code'

+eg=n 4elson +ussman:

"We are about to study the idea of a computational process . Computational processes are abstract beings that inhabit computers. As they evolve, processesmanipulate other abstract things called data . The evolution of a process is directedby a pattern of rules called a program . [...] The programs we use to con ure

processes are li!e a sorcerer s spells. They are carefully composed from symbolice#pressions in arcane and esoteric programming languages that prescribe the tas!swe want our processes to perform."

Y después, añade otra idea fundamental:

"A powerful programming language is more than ust a means for instructing acomputer to perform tas!s. The language also serves as a framewor! within whichwe organi$e our ideas about processes. Thus, when we describe a language, weshould pay particular attention to the means that the language provides forcombining simple ideas to form more comple# ideas."

Así, entre las características de un lenguaje de programación podemos remarcar lassiguientes:

• Define un proceso que se ejecuta en un computador• Es de alto nivel, cercano a los problemas que se quieren resolver abstracción!• "ermite construir nuevas abstracciones que se adapten al dominio que se

programa

"ara Abelson # $ussman, todos los lenguajes de programación permiten combinarideas simples en ideas m%s complejas mediante los siguientes tres mecanismos:

• expresiones primitivas , que representan las entidades m%s simples dellenguaje

mecanismos de combinación con los que se constru#en elementoscompuestos a partir de elementos m%s simples• mecanismos de abstracción con los que dar nombre a los elementos

compuestos # manipularlos como unidades

&uando se 'abla de elementos en el p%rrafo anterior nos estamos refiriendo tanto adatos como a programas(

Page 9: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 9/22

)na breve lista de características comunes a todos los lenguajes de programación:

• *ienen una sinta#is : un conjunto de reglas que definen qué e+presiones de te+toson correctas( "or ejemplo, en & todas las sentencias deben terminar en - (

• .os lenguajes de programación se ejecutan en un computador # tienen una

determinada sem%ntica que define cu%l ser% el resultado de la ejecución de unprograma(• Definen un conjunto detipos de datos primitivos que representan los posibles

valores que pueden devolver las e+presiones del lenguaje(• *ienen mecanismos de abstracción para definir nuevos tipos de datos a partir

de los primitivos o nuevas funciones # procedimientos(

Abstracción

El concepto deabstracci&n es fundamental en inform%tica( "ara modelar un dominiosistema de información de una universidad, sistema de sensores de una planta

química, etc(! es necesario definir distintasabstracciones que nos permitan tratar suselementos(

)na abstracción agrupa un conjunto de elementos datos # procedimientos! # le da unnombre( "or ejemplo, cuando 'ablamos del sistema de información de una universidadidentificamos elementos como:

• Estudiantes• Asignaturas• /atrícula• E+pediente académico• (((

E+isten abstracciones propias de la computación, que se utili0an en m1ltiplesdominios( "or ejemplo, abstracciones de datos como:

• .istas• 2rboles• 3rafos• *ablas 'as'

*ambién e+isten abstracciones que nos permiten tratar con dispositivos # ordenadorese+ternos:

• 4ic'ero• 5aster gr%fico• "rotocolo *&"67"

Page 10: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 10/22

)no de los trabajos principales de un inform%tico es la construcción de abstraccionesque permitan a'orrar tiempo # esfuer0o a la 'ora de tratar con la complejidad delmundo real(

*al # como dice 8oel $pols9# en su blog:

"TC' is what computer scientists li!e to call an abstraction( a simplification ofsomething much more complicated that is going on under the covers. As it turns out,a lot of computer programming consists of building abstractions. What is a stringlibrary) *t s a way to pretend that computers can manipulate strings ust as easily asthey can manipulate numbers. What is a file system) *t s a way to pretend that ahard drive isn t really a bunch of spinning magnetic platters that can store bits atcertain locations, but rather a hierarchical system of folders+within+folderscontaining individual files that in turn consist of one or more strings of bytes."

)na misión fundamental de los lenguajes de programación es proporcionar'erramientas que sirvan para construir estas abstracciones(

Paradigmas de programación

E+iste una enorme variedad de lenguajes de programación, no sólo en cuanto a susinta+is, sino también en cuanto a su comportamiento o sem%ntica(

emos visto que cada año el n1mero de lenguajes se incrementa, de forma que para losinform%ticos es pr%cticamente imposible conocer cada nuevo lenguaje que aparece("ero eso no es un problema, #a que todos esos lenguajes tienen característicascomunes # se pueden agrupar en cuatro grandes grupos o modelos computacionalesllamados paradigmas (

*odos los lenguajes pertenecen a uno de esos cuatro paradigmas( De forma que, si seconocen las características de los paradigmas de programación, es mu# sencilloaprender a programar en un nuevo lenguaje, porque tendr% las características delparadigma de programación al que pertene0ca(

El origen de la palabra paradigma entendida como un marco general en el que se

desarrollan teorías científicas se encuentra en el trabajo de ;<=> del filósofo e'istoriador de la ciencia *'omas $( ?u'n, a estructura de las revolucionescient-ficas ( Esa palabra 'a sido después adoptada por el mundo de la computaciónpara definir un conjunto de ideas # principios comunes de grandes grupos de lenguajesde programación(

.a definición de la palabra paradigma m%s cercana a lo que se quiere decir en lae+presión paradigma de programaci&n es la siguiente:

Page 11: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 11/22

" n marco filos&fico y te&rico de una escuela o disciplina cient-fica en el /ue se formulan teor-as, leyes y generali$aciones y los e#perimentos reali$ados en soportede ellas."

)n paradigma define un conjunto de reglas, patrones # estilos de programación queson usados por los lenguajes de programación que usan ese paradigma(

"odemos distinguir cuatro grandes paradigmas de programación:

• "aradigma funcional• "aradigma lógico• "aradigma imperativo o procedural• "aradigma orientado a objetos

Algunas características importantes de cada uno de estos paradigmas(

Paradigma funcional

En el paradigma funcional la computación se reali0a mediante la evaluación dee+presiones(

• Definición de funciones• 4unciones como datos primitivos• @alores sin efectos laterales, no e+iste la asignación• "rogramación declarativa

8define 8factorial 9 8if 8= #9 8: 8factorial 8 99999

)8factorial (97#;4#)8factorial ;#94< 4 4( 6( 4 6 # (<;<;#(7(#######

;; factorial proceso recursivo

(define (factorial n)

(if (= n 1)

Page 12: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 12/22

1

(* n (factorial (- n 1)))))

;; factorial proceso iterativo

(define (factorial n)

(fact-iter 1 1 n))

(define (fact-iter product counter max-count)

(if (> counter max-count)

product

(fact-iter (* counter product)

(+ counter 1)

max-count)))

Paradigma lógico

• Definición de reglas• )nificación como elemento de computación• "rogramación declarativa

padrede8'>uan' 'maria'9. @ >uan es padre de mariapadrede8'pablo' '>uan'9. @ pablo es padre de >uanpadrede8'pablo' 'marcela'9.padrede8'carlos' 'debora'9.

hi>ode8A 29 B padrede82 A9.abuelode8A 29 B padrede8A ,9 padrede8, 29.hermanode8A 29 B padrede8, A9 padrede8, 29 A C== 2.

familiarde8A 29 B padrede8A 29.familiarde8A 29 B hi>ode8A 29.familiarde8A 29 B hermanode8A 29.

? hermanode8'>uan' 'marcela'9.yes? hermanode8'carlos' '>uan'9.no? abuelode8'pablo' 'maria'9.

Page 13: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 13/22

yes? abuelode8'maria' 'pablo'9.no

Paradigma imperativo

.os lenguajes de programación que cumplen el paradigma imperativo se caracteri0anpor tener un estado implícito que es modificado mediante instrucciones o comandosdel lenguaje( &omo resultado, estos lenguajes tienen una noción de secuenciación delos comandos para permitir un control preciso # determinista del estado(

• Definición de procedimientos• Definición de tipos de datos• &'equeo de tipos en tiempo de compilación•

&ambio de estado de variables• "asos de ejecución de un proceso

EJEMPLO EN LENGUAJE IMPERATIVO:

Función del factorial usando ciclos o iterativa. A continuación se muestra la función:

long int factorial(int n){int prod=1;for (int contador=n; contador>0; contador--)

prod*=contador;return (prod);}

Función del factorial usando recursividad. A continuación se muestra la función:

long int actorial(int n){if (n == 0)return 1;else

Page 14: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 14/22

return (n * actorial (n - 1)); !!a"ui se llama a si misma}

Scheme Como lenguaje de programación

Algunos ejemplos de Scheme

$c'eme es un lenguaje interpretado( "odemos lan0ar un intérprete de $c'eme # teclearen el prompt algunas e+presiones( El intérprete anali0ar% lae#presi&n # mostrar% elvalor resultante de evaluarla (

48+ 4 ;98+98+ 4 7 <98+ 8: 4 ;9 8 ; 99

.as e+presiones en $c'eme tienen una forma denominada notaci&n prefi a deCambridge 0Cambridge prefi# notation1 el nombre de &ambridge es por la localidad&ambridge, /assac'usets, donde reside el /7*, lugar en el que se ideó el .isp!, en laque la e+presión est% delimitada por paréntesis # el operando va seguido de losoperadores(

.a sinta+is es la siguiente:

8 funciDn) arg ) ... argn)9

En $c'eme podemos interpretar los paréntesis abiertos comoevaluadores olan$adores de la función que 'a# a continuación(

.a forma de evaluar una e+presión en $c'eme es mu# sencilla:

;( Evaluar cada uno de los argumentos>( Aplicar la función nombrada tras el paréntesis a los valores resultantes de la

evaluación anterior8+ 8: 4 ;9 8 ; 83 4 ;999

8+ < 8 ; 83 4 ;9998+ < 8 ; 7998+ < 9

Atención, preguntas

BEn qué orden se eval1an los argumentosC B7nflu#e ese orden en el resultado de la evaluaciónC

Page 15: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 15/22

En $c'eme los términos funci&n # procedimiento significan lo mismo # se usan deforma intercambiable( $on ejemplos de funciones o procedimientos:+, , : (

En $c'eme la evaluación de una función siempre devuelve un valor, a no ser que seprodu0ca un error que detiene la evaluación:

8: 8+ ; 79 83 ; #99

"odemos utili0ar la forma especial define para darle un nombre identificador,símbolo! a un valor( )na ve0 definido, podemos usar el nombre en lugar del valor( Ya veremos m%s adelante que esto es equivalente a decir que el símbolose eval2a al valor(

) 8define pi ;. 7 69) pi3.14159) 8sin 83 pi 4990.9999999999991198) 8define a 8+ 4 8: ; 7999) a14

¿Por u! Scheme"

$c'eme es un dialecto de .isp(

$c'eme es un lenguaje actual( E+isten m1ltiples pro#ectos # bibliotecas que se est%nimplementando en la actualidad en $c'eme( Algunos ejemplos:

• &olección de programas en $c'eme•

$c'eme 3imp , $c'eme est% dentro de 3imp para e+tender la 'erramienta detratamiento de im%genes• 5ecetas en $c'eme• ".ane* , un repositorio de paquetes escritos en $c'eme(

$c'eme es un lenguaje ideal para ."" porque:

• *iene una sinta+is mu# sencilla• Es un lenguaje de script• *iene m1ltiples e+tensiones: programación orientada a objetos, etc(•

Es posible de e+tender mediante macrosE+isten a su ve0 m1ltiples intérpretes de $c'eme, nosotros vamos a usar uno de lasm%s e+tendidos: /0$c'eme en el entorno de programaciónDr$c'eme desarrolladospor el grupo".* $c'eme !(

Algunas primitivas

5ecordemos del apartado anterior que un lenguaje de programación define unos:

Page 16: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 16/22

• procedimientos primitivos• mecanismos de composición• mecanismos de abstracción

@amos a revisar $c'eme desde esta perspectiva(

.as primitivas de $c'eme consisten en un conjunto de tipos de datos, formasespeciales # funciones incluidas en el lenguaje( Es un lenguaje no demasiado complejo

a diferencia de otros como & o 8ava!( Est% descrito completamente en undocumento de especificación de F p%ginas llamado 3evised 4 3eport on the

Algorithmic anguage 5cheme se puede consultar eneste enlace

@amos a revisar los tipos de datos primitivos de $c'eme, así como algunosprocedimientos primitivos para trabajar con valores de esos tipos(

• Gooleanos•

H1meros• &aracteres• &adenas• $ímbolos• "arejas # listas I!• @ectores I!• "rocedimientos

I! .os veremos en detalle en futuros cursos, cuando 'ablemos de tipos de datoscompuestos( En la clase de 'o# sólo veremos unas algunas funciones elementales(

Booleanos

Et F verdaderoEf F falso8) ; . 98= ; ;.#98eGual? ; ;.#98or 8 ; . 9 Et98and Et Et Ef98not Ef98not ;9

Hótese en los ejemplos la diferencia entre8= ; ;.#9 #8eGual? ; ;.#9 (

Números

.a cantidad de tipos numéricos que soporta $c'eme es grande( $ólo vamos a ver unapequeña parte(

number

Page 17: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 17/22

complerealrationalinteger

Algunos procedimientos primitivos

8 = 4 ; ; 7 98ma ; # ###983 44 798Guotient 44 798remainder 44 798eGual? #. 83 4998= #. 83 4998abs 8: ; 4998floor ;.79 F relacionadosB ceiling truncate round8sin 4.49 F relacionadosB cos tan asin acos atan

Caracteres

ECaECAECspaceEC F se soportan caracteres internacionalesECI F se codifican en $%& (8char ? ECa ECb98char numeric? CE 9F relacionadosB char alphabetic? char loJer case? F char Jhitespace? char upper case?8char upcase EC 98char )integer ECspace9

Cadenas

.as cadenas son secuencias finitas de caracteres(

"hola""Ka palabra C"holaC" tiene 7 letras"8maLe string # ECo98substring "Hola Gue tal" 4 798string? "hola"98string )list "hola"9

Listas

)no de los elementos fundamentales de $c'eme, # de .isp, son las listas( @amos a vercómo definir, crear, recorrer # concatenar listas(

8list 4 ; 79 F list crea una lista'8 4 ; 79 F otra forma de definir la misma lista8car '8 4 ; 799 F primer elemento de la lista8cdr '8 4 ; 799 F resto de la lista'89 F lista vacMa8cdr '8 99 F devuelve la lista vacMa

Page 18: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 18/22

Page 19: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 19/22

El otro uso dedefine es para definir nuevos procedimientos aunque #a veremosm%s adelante que $c'eme utili0a siempre el define anterior, # que esta forma del defineno es m%s quea$ucar sint%ctico !(

.a sinta+is para definir un procedimiento es:

8define 8 nombre funcion) args)9 cuerpo)9

$e define una función con el nombre, argumentos # cuerpo dados( El cuerpo es unae+presión de $c'eme( El resultado de evaluar la 1ltima e+presión del cuerpo es el valordevuelto por al función(

Ejemplos:

) 8define 8cuadrado 98: 99

) 8cuadrado 494) 8cuadrado ; 7 9 F error

8define 8plural pal98Jord pal 's99

) 8plural 'perro9 perros) 8plural 'arbol9arbols

#structuras de control

El otro elemento com1m a todos los lenguajes de programación aparte de laabstracción # de las primitivas! es la posibilidad decomponer e+presiones sencillas ene+presiones compuestas(

emos visto que una de las características de $c'eme es la composición de funciones($c'eme también define estructuras de control que nos permiten seleccionar qué partede una e+presión evaluamos en función del resultado de la evaluación de otras(

.as estructuras m%s importantes de $c'eme son el if # elcond para reali0ar unaevaluación condicional(

Forma especial 'if'

.a forma especial if reali0a una evaluación condicional de las e+presiones que lasiguen, seg1n el resultado de una condición(

8define ;9

Page 20: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 20/22

8if 8) 9'mayor Gue cinco'menor o igual Gue cinco9

8define 8vocal? 9 8member? 'aeiou99

8define 8plural pal9 8if 8vocal? 8last pal99 8Jord pal 's9 8Jord pal 'es999

.a sinta+is de if es:

8if condiciDn) e p verdad) e p falso)9

El funcionamiento de la forma especial es:

;( Evaluar condici&n>( $i el resultado es true evaluare#p+verdad J( $ino evaluare#p+falso

8if 8) ; 49 8: 4 ;9 83 4 #99

Forma especial 'cond'

.a forma especial cond eval1a una serie de condiciones # devuelve el valor de lae+presión asociada a la primera condición verdadera(

.a sinta+is de cond es la siguiente:

8cond8 e p cond ) e p consec )9

8 e p cond 4) e p consec 4)9 ... 8else e p consec else)99

.a sem%ntica es la siguiente:

;( $e eval1an de forma ordenada todas las e+presiones 'asta que una de ellasdevuelvaEt

>( $i alguna e+presión devuelveEt , se devuelve el valor del consecuente de esa

e+presiónJ( $i ninguna e+presión es cierta, se devuelve el valor resultante de evaluar elconsecuente del else

$e 'ace notar En cualquier caso, sólo se eval1a un 1nico consecuente delcond (

Page 21: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 21/22

¿Y los bucles?

En programación funcional pura no e+iste el concepto de bucle tan e+tendido en loslenguajes de programación imperativos( Ya veremos que no es necesario si tenemos larecursión( &ualquier función en donde se necesite repetir una sentencia un n1mero de veces o 'asta que se cumpla una determinada condición! se puede e+presar de formarecursiva(

Aunque en $c'eme e+iste la forma especial8do ...9 que permite implementar un bucle nosotros no vamos a usarla( El uso de esta forma especial nos aparta delparadigma funcional, #a que su sem%ntica no puede definirse con el modelo desustitución que veremos en las pró+imas clases(

"or ejemplo, las siguientes funciones son equivalentes( En &, usando un bucleJhile

suma hasta 8L9 N suma=#F>=#F

Jhile 8> =L9 N suma = suma+>F >++F OO

En $c'eme, usando la recursión:

8define 8suma hasta L9 8if 8= L #9 # 8+ L 8suma hasta 8 L 99999

Paradigma orientado a objetos

• Definición de clases # 'erencia• Kbjetos como abstracción de datos # procedimientos• "olimorfismo # c'equeo de tipos en tiempo de ejecución

)na refle+ión importante es que la separación entre los paradigmas # los lenguajes noes estricta( E+isten ideas comunes a distintos paradigmas, así como lenguajes deprogramación que soportan m%s de un paradigma( "or ejemplo, el paradigmafuncional # lógico comparten característicasdeclarativas , mientras que el paradigmaorientado a objetos # procedural tienen característicasimperativas (

Otros paradigmas de programación menos comunes:

• "aradigmas de programación paralela # concurrente• "aradigmas basados en restricciones

Page 22: Lenguajes y Paradigmas

8/15/2019 Lenguajes y Paradigmas

http://slidepdf.com/reader/full/lenguajes-y-paradigmas 22/22

• "aradigmas visuales