tema 1: lenguajes de programación - dccia.ua.es · implementaban en fortran, las aplicaciones para...

28
Tema 1: Lenguajes de programación Índice 1 Historia de los lenguajes de programación........................................................................ 2 2 Elementos de los lenguajes de programación.................................................................. 10 2.1 No son lenguajes de programación..............................................................................10 2.2 Características de los lenguajes de programación....................................................... 11 2.3 Abstracción.................................................................................................................. 13 3 Paradigmas de programación........................................................................................... 14 3.1 Paradigma funcional.................................................................................................... 15 3.2 Paradigma lógico......................................................................................................... 15 3.3 Paradigma imperativo.................................................................................................. 16 3.4 Paradigma orientado a objetos.....................................................................................17 4 Scheme Como lenguaje de programación........................................................................ 18 4.1 Algunos ejemplos de Scheme...................................................................................... 18 4.2 ¿Por qué Scheme?........................................................................................................19 4.3 Algunas primitivas.......................................................................................................20 4.4 Extensiones de Scheme............................................................................................... 23 4.5 Abstracción: define...................................................................................................... 23 4.6 Estructuras de control.................................................................................................. 25 5 Referencias....................................................................................................................... 27 Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Upload: vodang

Post on 31-Oct-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

Tema 1: Lenguajes de programación

Índice

1 Historia de los lenguajes de programación........................................................................ 2

2 Elementos de los lenguajes de programación.................................................................. 10

2.1 No son lenguajes de programación..............................................................................10

2.2 Características de los lenguajes de programación....................................................... 11

2.3 Abstracción..................................................................................................................13

3 Paradigmas de programación........................................................................................... 14

3.1 Paradigma funcional....................................................................................................15

3.2 Paradigma lógico......................................................................................................... 15

3.3 Paradigma imperativo..................................................................................................16

3.4 Paradigma orientado a objetos.....................................................................................17

4 Scheme Como lenguaje de programación........................................................................18

4.1 Algunos ejemplos de Scheme......................................................................................18

4.2 ¿Por qué Scheme?........................................................................................................19

4.3 Algunas primitivas.......................................................................................................20

4.4 Extensiones de Scheme............................................................................................... 23

4.5 Abstracción: define......................................................................................................23

4.6 Estructuras de control.................................................................................................. 25

5 Referencias.......................................................................................................................27

Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 2: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

1. Historia de los lenguajes de programación

Desde 1954 hasta la actualidad se han documentado más de 2.500 lenguajes de programación(consultar en The Language List(http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm) ). Entre 1952 y 1972, laprimera época de los lenguajes de programación, se desarrollaron alrededor de 200 lenguajes,de los que una decena fueron realmente siginificativos y tuvieron influencia en el desarrollode lenguajes posteriores.

Una lista parcial de algunos de los lenguajes de programación más importantes, junto con suaño de creación:

• 1957 FORTRAN• 1958 ALGOL• 1960 Lisp• 1960 COBOL• 1962 APL• 1962 SIMULA• 1964 BASIC• 1964 PL/I• 1970 Prolog• 1972 C• 1975 Pascal• 1975 Scheme• 1975 Modula• 1983 Smalltalk-80• 1983 Objective-C• 1983 Ada• 1986 C++• 1986 Eiffel• 1987 Perl• 1988 Tcl/Tk• 1990 Haskell• 1991 Python• 1993 Ruby• 1995 Java• 1995 PHP• 2000 C#

Un diagrama de los lenguajes más importantes y sus dependencias:

Tema 1: Lenguajes de programación

Page 2Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 3: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

Éric Lévénez ha hecho el esfuerzo de construir un árbol genealógico de los lenguajes deprogramación, que indica la fecha en la que cada lenguaje fue creado y la influencia que hatenido en los lenguajes posteriores. Consultar el documento PDF(docs/HistoryProgrammingLanguagesLevenez_a4.pdf) y la web de Éric Lévénez(http://www.levenez.com/lang/) .

Tema 1: Lenguajes de programación

Page 3Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 4: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

La Torre de Babel, representa el gran número de lenguajes de programación. Esta imagen seusó en la portada de Programming Languages: History and Fundamentals, de J. E. Sauel,1969, Prentice Hall.

Al principio, los lenguajes se diseñaban únicamente para poder ejecutar los programaseficientemente. Los ordenadores, carísimos, eran el recurso crítico, y los programadores eranbastante baratos. Un lenguaje de alto nivel tenía que ser competitivo con la ejecución de uncódigo en ensamblador. A mediados de los años 60, cuando se habían diseñado FORTRAN,COBOL, LISP y ALGOL, John Backus (creador de FORTRAN) se dio cuenta que laprogramación estaba cambiando. Las máquinas eran menos caras, el coste de laprogramación estaba aumentando, aparecía la necesidad de mover o migrar los programas deunas estaciones a otras, y surgía la necesidad de llevar un buen mantenimiento de losprogramas resultantes. El objetivo de un lenguaje de alto nivel se transformó no sólo en enejecutar los programas eficientemente, sino también en facilitar el desarrollo de programaspara resolver problemas en determinadas áreas de aplicación.

La tecnología de los ordenadores maduró entre 1960 y 1970 y los lenguajes se centraron enresolver problemas específicos de un dominio. Los programas científicos generalmente seimplementaban en FORTRAN, las aplicaciones para los negocios en COBOL, lasaplicaciones militares en JOVIAL, las de inteligencia artificial en LISP y las militaresinternas en Ada. Al igual que sucede con los lenguajes naturales, los lenguajes deprogramación a veces dejan de usarse. ALGOL no se utiliza desde los años 60, se reemplazópor Pascal, el cual se reemplazó a su vez por C++ y Java. COBOL, que se utilizaba para lasaplicaciones mercantiles, se sustituyó también por C++.

Tema 1: Lenguajes de programación

Page 4Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 5: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

Los primeros lenguajes que todavía se usan tienen revisiones periódicas para reflejarinfluencias de otras áreas de computación. Lenguajes como Java, C++ y ML reflejan unagran experiencia obtenida en el diseño y uso de los cientos de lenguajes antiguos. Algunas deesas influencias son:

• Recursos del ordenador: la evolución de los ordenadores desde los años 50, junto con losmodernos sistemas operativos, han influenciado las características de los lenguajes dealto nivel.

• Aplicaciones: el uso de los ordenadores se ha extendido rápidamente desde lasaplicaciones militares, científicas y de negocios a los juegos, los ordenadores personales,internet y cualquier aplicación cotidiana.

• Métodos de programación: el diseño de los lenguajes tiene que reflejar los buenosmétodos para implementar programas grandes y complejos.

• Estudios teóricos: Gracias a la investigación durante más de 50 años en el diseño eimplementación de lenguajes, se conocen los puntos fuertes y débiles de lascaracterísticas de los mismos, por lo que influye en el diseño de los nuevos lenguajes.

• Estandarización: cada vez más existe la necesidad de que los programas sean portablesde unos sistemas a otros.

La siguiente tabla (extraida del libro Programming Languages. Design and Implementation,de Terrence W. Pratt y Marvin V. Zelkowitz) muestra una pequeña lista de los lenguajes y lasinfluencias que fueron importante a finales del siglo 20.

Tema 1: Lenguajes de programación

Page 5Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 6: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

A pesar de la enorme lista de lenguajes de programación que han ido apareciendo, la mayorparte de los programadores sólo utilizan unos pocos lenguajes. Además, los programadores amenudo trabajan en empresas o instalaciones donde se trabaja con un único lenguaje enparticular, como Java, C o Ada. Entonces, os preguntarés por qué es importante el estudio dediferentes lenguajes o paradigmas cuando al final sólo trabajaréis con unos pocos. Haymuchas razones que justifican 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 lascaracterísticas en un lenguaje de programación, se mejorará la habilidad para escribirprogramas eficientes. Por ejemplo, si se conoce cómo crear y manipular listas o cadenasen un lenguaje, por ejemplo Scheme, utilizando recursión se conseguirá construirprogramas más eficientes.

• Incrementa el vocabulario de los elementos de programación.• Permite una mejor elección del lenguaje de programación: El conocimiento de diversos

lenguajes de programación facilitan la elección del lenguaje más adecuado para unproyecto determinado.

Tema 1: Lenguajes de programación

Page 6Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 7: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

• Mejora la habilidad para desarrollar programas efectivos y eficientes: Muchos lenguajesproporcionan características que, cuando se utilizan correctamente, aportan muchosbeneficios a la programación pero, cuando se hace un uso incorrecto, pueden ocasionarun gran coste computacional. El ejemplo típico es la recursión, que permite unaimplementación elegante y eficiente de funciones. Pero cuando no se sabe utilizar, puedeocasionar un aumento exponencial del tiempo de ejecución.

• Facilita el aprendizaje de un nuevo lenguaje de programación: Cuando se conocen lasestructuras, técnicas de implementación y construcciones de un lenguaje, es mucho mássencillo aprender un nuevo lenguaje de programación que tenga estructuras similares.

• Facilita el diseño de nuevos lenguajes de programación: Es posible que en un futurotengais que diseñar vosotros un lenguaje que se adapte a vuestras necesidades. Cuantosmás lenguajes y paradigmas se conozcan, más sencillo resultará el diseño y laimplementación.

La historia de los lenguajes de programación es dinámica y se encuentra en continuaexpansión. El gran número de lenguajes de programación que han aparecido desde los años60 hasta la actualidad no son ni mucho menos los únicos que aparecerán en un futuro.

A continuación tenemos una lista extraida de freshmeat donde se puede ver el número deproyectos activos basados en cada lenguaje de programación en la actualidad.

• Ada (67 projects)• APL (3 projects)• ASP (47 projects)• Assembly (272 projects)• Awk (68 projects)• Basic (39 projects)• C (9296 projects)• C# (344 projects)• C++ (5207 projects)• Clipper (1 project)• Cold Fusion (25 projects)• Common Lisp (67 projects)• D (15 projects)• Delphi (80 projects)• Dylan (2 projects)• Eiffel (35 projects)• Emacs-Lisp (66 projects)• Erlang (39 projects)• Euler (1 project)• Euphoria (10 projects)• Forth (29 projects)

Tema 1: Lenguajes de programación

Page 7Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 8: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

• Fortran (94 projects)• Gambas (11 projects)• Groovy (42 projects)• Haskell (76 projects)• Java (6337 projects)• JavaScript (1260 projects)• Lisp (88 projects)• Logo (6 projects)• Lua (60 projects)• ML (33 projects)• Modula (8 projects)• Object Pascal (35 projects)• Objective C (390 projects)• OCaml (98 projects)• Other (310 projects)• Other Scripting Engines (173 projects)• Pascal (63 projects)• Perl (3816 projects)• PHP (4521 projects)• Pike (13 projects)• PL/SQL (95 projects)• Pliant (1 project)• PROGRESS (4 projects)• Prolog (24 projects)• Python (3323 projects)• REALbasic (14 projects)• Rebol (3 projects)• Rexx (11 projects)• Ruby (512 projects)• Scheme (151 projects)• Simula (1 project)• Smalltalk (24 projects)• SQL (565 projects)• Tcl (523 projects)• Unix Shell (1119 projects)• Visual Basic (49 projects)• XBasic (1 project)• YACC (32 projects)• Zope (48 projects)

En la siguiente web Timeline of Programming Languages

Tema 1: Lenguajes de programación

Page 8Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 9: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

(http://encyclopedia.thefreedictionary.com/Programming%20language%20timeline) tenemosuna lista de los lenguajes que han aparecido cronológicamente desde los años 50. Esinteresante ver los que han aparecido desde el año 2000 al 2007 (21 lenguajes).

Cuando los lenguajes de programación empezaron a aparecer, los creadores normalmenteeran entidades o empresas. Hoy en día es diferente, cualquier informático puede crear unlenguaje nuevo en un momento dado que precise ciertas características en concreto. Porejemplo, tenemos el caso de Ruby, un lenguaje de programación ideado en 1993 por un jovenjaponés llamado Yukihiro Matsumoto. Quiso crear un lenguaje donde la programaciónfuncional y la imperativa estuviese balanceada. Necesitaba además que fuese un lenguaje descript más potente que Perl y más orientado a objetos que Phyton.

El nombre de Ruby se decidió entre Yukihiro y Keiju Ishitsuka en 1993 en una sesión onlinede chat, antes de que se hubiese implementado el código. Se propusieron dos nombres, Rubyy Coral, y al final decidieron Ruby porque era la piedra del zodiaco de uno de sus colegas.

La primera versión pública Ruby 0.95 se anunció en un grupo de noticias domésticas enJapón en diciembre de 1995. A continuación se lanzaron tres versiones más y se creó elgrupo de noticias ruby-list. La versión Ruby 1.0 apareció en diciembre de 1996, la versión1.3 en 1999 y la 1.8.7 en junio de 2008. La última versión que se ha lanzado Ruby 1.9.1 hasido el 25 de Enero de 2009.

Ruby es un lenguaje orientado a objetos pero multiparadigma: esto quiere decir que en rubycada tipo de dato es un objeto y cada función es un método, pero permite programaciónimperativa y funcional (multiparadigma).

Un ejemplo de programación en Ruby:

puts "Hello World!"

Otro ejemplo:

Tema 1: Lenguajes de programación

Page 9Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 10: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

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

2. Elementos de los lenguajes de programación

Hemos visto el gran número de lenguajes de programación que se han desarrollado en lahistoria de la informática. A pesar de la gran variedad de lenguajes desarrollados, hay unoselementos comunes a todos ellos. ¿Cuáles son? ¿Qué hace que algo pueda ser considerado unlenguaje de programación?

2.1. No son lenguajes de programación

Existen elementos muy usados por los informáticos que tienen algunas de las característicasde los lenguajes de programación, pero que no lo son. Veamos algún ejemplo.

Los lenguajes XML, uno de los estándares más usados por las aplicaciones informáticas paracompartir datos, son lenguajes escritos con una sintaxis perfectamente definida. Por ejemplo,el siguiente texto en un lenguaje XML para definir una lista de persones:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE people_list SYSTEM "example.dtd"><people_list><person>

<name>Fred Bloggs</name><birthdate>27/11/2008</birthdate><gender>Male</gender>

</person><person>

<name>Mary Baggins</name><birthdate>12/07/1942</birthdate><gender>Female</gender>

</person></people_list>

Sin embargo le falta una característica fundamental para poder ser considerado un lenguajede programación: no define un comportamiento, no tiene una semántica asociada. El trozo decódigo anterior no puede ser ejecutado tal cual en un computador, sino que únicamentedefine un conjunto de datos.

Un entorno de programación visual para definir comportamientos y animaciones es otroejemplo de algo que no es estrictamente un lenguaje de programación. Por ejemplo Scratch(http://scratch.mit.edu/) es un lenguaje visual desarrollado por el MIT para promover elinterés por la programación entre los jóvenes.

Tema 1: Lenguajes de programación

Page 10Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 11: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

El ejemplo anterior define una animación de un sprite en la pantalla. Otro entornos oherramienta similar es el Adobe Director, que permite diseñar animaciones multimedia. ¿Lospodemos considerar lenguajes de programación? Si lo consideramos de una forma estricta,no. No son lenguajes textuales, los programas no se pueden escribir en un fichero de texto.Tampoco tienen elementos fundamentales de los lenguajes de programación como son lasfunciones y los tipos de datos. Aunque, por otro lado, si consideramos de una forma másamplia el concepto de función, sí que existen elementos en esos lenguajes que posibilitan lacreación de abstracciones reutilizables en distintos programas.

Podríamos decir que son herramientas de programación de animaciones que utilizan ciertascaracterísticas de los lenguajes de programación.

2.2. Características de los lenguajes de programación

¿Cuáles son estas características?

Según la definición de la Encyclopedia of Computer Science (Encyclopedia of ComputerScience, 4th Edition, Anthony Ralston (Editor), Edwin D. Reilly (Editor), DavidHemmendinger (Editor), Wiley, 2000. Disponible en la biblioteca politécnica conidentificador: POE R0/E/I/ENC/RAL):

"A programming language is a set of characters, rules for combining them, and rulesspecifying their effects when executed by a computer, which have the following fourcharacteristics:

1. It requires no knowledge of machine code on the part of the user2. It has machine independence

Tema 1: Lenguajes de programación

Page 11Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 12: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

3. Is translated into machine language4. Employs a notation that is closer to that of the specific problem being solved than is

machine code"

Según Abelson y Sussman, en el libro que vamos a seguir en nuestra asignatura (SICP, p. 1):

"We are about to study the idea of a computational process. Computational processes areabstract beings that inhabit computers. As they evolve, processes manipulate other abstractthings called data. The evolution of a process is directed by a pattern of rules called aprogram. [...] The programs we use to conjure processes are like a sorcerer's spells. Theyare carefully composed from symbolic expressions in arcane and esoteric programminglanguages that prescribe the tasks we want our processes to perform."

Y después, en la página 4, añaden otra idea fundamental:

"A powerful programming language is more than just a means for instructing a computer toperform tasks. The language also serves as a framework within which we organize our ideasabout processes. Thus, when we describe a language, we should pay particular attention tothe means that the language provides for combining simple ideas to form more complexideas."

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)• Permite construir nuevas abstracciones que se adapten al dominio que se programa

Para Abelson y Sussman, todos los lenguajes de progamación permiten combinar ideassimples en ideas más complejas mediante los siguientes tres mecanismos:

• expresiones primitivas, que representan las entidades más simples del lenguaje• mecanismos de combinación con los que se construyen elementos compuestos a partir

de elementos más simples• mecanismos de abstracción con los que dar nombre a los elementos compuestos y

manipularlos como unidades

Cuando se habla de elementos en el párrafo anterior nos estamos refiriendo tanto a datoscomo a programas.

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

• Tienen una sintaxis: un conjunto de reglas que definen qué expresiones de texto soncorrectas. Por ejemplo, en C todas las sentencias deben terminar en ';'.

• Los lenguajes de programación se ejecutan en un computador y tienen una determinadasemántica que define cuál será el resultado de la ejecución de un programa.

Tema 1: Lenguajes de programación

Page 12Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 13: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

• Definen un conjunto de tipos de datos primitivos que representan los posibles valores quepueden devolver las expresiones del lenguaje.

• Tienen mecanismos de abstracción para definir nuevos tipos de datos a partir de losprimitivos o nuevas funciones y procedimientos.

2.3. Abstracción

El concepto de abstracción es fundamental en informática. Para modelar un dominio(sistema de información de una universidad, sistema de sensores de una planta química, etc.)es necesario definir distintas abstracciones que nos permitan tratar sus elementos.

Una abstracción agrupa un conjunto de elementos (datos y procedimientos) y le da unnombre. Por ejemplo, cuando hablamos del sistema de información de una universidadidentificamos elementos como:

• Estudiantes• Asignaturas• Matrícula• Expediente académico• ...

Existen abstracciones propias de la computación, que se utilizan en múltiples dominios. Porejemplo, abstracciones de datos como:

• Listas• Árboles• Grafos• Tablas hash

También existen abstracciones que nos permiten tratar con dispositivos y ordenadoresexternos:

• Fichero• Raster gráfico• Protocolo TCP/IP

Uno de los trabajos principales de un informático es la construcción de abstracciones quepermitan ahorrar tiempo y esfuerzo a la hora de tratar con la complejidad del mundo real.

Tal y como dice Joel Spolsky en su blog Joel on Software (http://www.joelonsoftware.com/):

"TCP is what computer scientists like to call an abstraction: a simplification of somethingmuch more complicated that is going on under the covers. As it turns out, a lot of computer

Tema 1: Lenguajes de programación

Page 13Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 14: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

programming consists of building abstractions. What is a string library? It's a way topretend that computers can manipulate strings just as easily as they can manipulatenumbers. What is a file system? It's a way to pretend that a hard drive isn't really a bunch ofspinning magnetic platters that can store bits at certain locations, but rather a hierarchicalsystem of folders-within-folders containing individual files that in turn consist of one or morestrings of bytes."

Una misión fundamental de los lenguajes de programación es proporcionar herramientas quesirvan para construir estas abstracciones.

3. Paradigmas de programación

Existe una enorme variedad de lenguajes de programación, no sólo en cuanto a su sintaxis,sino también en cuanto a su comportamiento o semántica.

Hemos visto que cada año el número de lenguajes se incrementa, de forma que para losinformáticos es prácticamente imposible conocer cada nuevo lenguaje que aparece. Pero esono es un problema, ya que todos esos lenguajes tienen características comunes y se puedenagrupar en cuatro grandes grupos o modelos computacionales llamados paradigmas.

Imagen del libro Programming Languages. Design and Implementation, de Terrence W.Pratt y Marvin V. Zelkowitz.

Todos los lenguajes pertenecen a uno de esos cuatro paradigmas. De forma que, si seconocen las características de los paradigmas de programación, es muy sencillo aprender aprogramar en un nuevo lenguaje, porque tendrá las características del paradigma de

Tema 1: Lenguajes de programación

Page 14Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 15: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

programación al que pertenezca.

El origen de la palabra paradigma entendida como un marco general en el que se desarrollanteorías científicas se encuentra en el trabajo de 1962 del filósofo e historiador de la cienciaThomas S. Kuhn, La estructura de las revoluciones científicas. Esa palabra ha sido despuésadoptada por el mundo de la computación para definir un conjunto de ideas y principioscomunes de grandes grupos de lenguajes de programación.

La definición de la palabra paradigma más cercana a lo que se quiere decir en la expresiónparadigma de programación es la siguiente:

"Un marco filosófico y teórico de una escuela o disciplina científica en el que se formulanteorías, leyes y generalizaciones y los experimentos realizados en soporte de ellas."

Un paradigma define un conjunto de reglas, patrones y estilos de programación que sonusados por los lenguajes de programación que usan ese paradigma.

Podemos distinguir cuatro grandes paradigmas de programación:

• Paradigma funcional• Paradigma lógico• Paradigma imperativo o procedural• Paradigma orientado a objetos

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

3.1. Paradigma funcional

En el paradigma funcional la computación se realiza mediante la evaluación de expresiones.

• Definición de funciones• Funciones como datos primitivos• Valores sin efectos laterales, no existe la asignación• Programación declarativa

(define (factorial x)(if (= x 0)

1(* x (factorial (- x 1)))))

>(factorial 8)40320>(factorial 30)265252859812191058636308480000000

3.2. Paradigma lógico

Tema 1: Lenguajes de programación

Page 15Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 16: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

• Definición de reglas• Unificación como elemento de computación• Programación declarativa

padrede('juan', 'maria'). % juan es padre de mariapadrede('pablo', 'juan'). % pablo es padre de juanpadrede('pablo', 'marcela').padrede('carlos', 'debora').

hijode(A,B) :- padrede(B,A).abuelode(A,B) :- padrede(A,C), padrede(C,B).hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \== B.

familiarde(A,B) :- padrede(A,B).familiarde(A,B) :- hijode(A,B).familiarde(A,B) :- hermanode(A,B).

?- hermanode('juan', 'marcela').yes?- hermanode('carlos', 'juan').no?- abuelode('pablo', 'maria').yes?- abuelode('maria', 'pablo').no

3.3. Paradigma imperativo

Los lenguajes de programación que complen el paradigma imperativo se caracterizan portener un estado implícito que es modificado mediante instrucciones o comandos del lenguaje.Como resultado, estos lenguajes tienen una noción de secuenciación de los comandos parapermitir un control preciso y determinista del estado.

• Definición de procedimientos• Definición de tipos de datos• Chequeo de tipos en tiempo de compilación• Cambio de estado de variables• Pasos de ejecución de un proceso

typetDimension = 1..100;eMatriz(f,c: tDimension) = array [1..f,1..c] of real;

tRango = recordf,c: tDimension value 1;

end;

tpMatriz = ^eMatriz;

procedure EscribirMatriz(var m: tpMatriz);var filas,col : integer;begin

Tema 1: Lenguajes de programación

Page 16Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 17: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

for filas := 1 to m^.f do beginfor col := 1 to m^.c do

write(m^[filas,col]:7:2);writeln(resultado);writeln(resultado)

end;end;

3.4. Paradigma orientado a objetos• Definición de clases y herencia• Objetos como abstracción de datos y procedimientos• Polimorfismo y chequeo de tipos en tiempo de ejecución

public class Bicicleta {public int marcha;public int velocidad;

public Bicicleta(int velocidadInicial, int marchaInicial) {marcha = marchaInicial;velocidad = velocidadInicial;

}

public void setMarcha(int nuevoValor) {marcha = nuevoValor;

}

public void frenar(int decremento) {velocidad -= decremento;

}

public void acelerar(int incremento) {velocidad += incremento;

}}

public class MountainBike extends Bicicleta {public int alturaSillin;

public MountainBike(int alturaInicial, int velocidadInicial, intmarchaInicial) {

super(velocidadInicial, marchaInicial);alturaSillin = alturaInicial;

}

public void setAltura(int nuevoValor) {alturaSillin = nuevoValor;

}}

public class Excursion {

public static void main(String[] args) {MountainBike miBicicleta = new MoutainBike(10,10,3);miBicicleta.acelerar(10);miBicicleta.setMarcha(4);miBicicleta.frenar(10);

Tema 1: Lenguajes de programación

Page 17Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 18: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

}}

Una reflexión importante es que la separación entre los paradigmas y los lenguajes no esestricta. Existen ideas comunes a distintos paradigmas, así como lenguajes de programaciónque soportan más de un paradigma. Por ejemplo, el paradigma funcional y lógico compartencaracterísticas declarativas, mientras que el paradigma orientado a objetos y proceduraltienen características imperativas.

Otros paradigmas de programación menos comunes:

• Paradigmas de programación paralela y concurrente• Paradigmas basados en restricciones• Paradigmas visuales

Se puede encontrar más información sobre distintos paradigmas de programación en laWikipedia (http://en.wikipedia.org/wiki/Programming_paradigm) .

4. Scheme Como lenguaje de programación

4.1. Algunos ejemplos de Scheme

Scheme es un lenguaje interpretado. Podemos lanzar un intérprete de Scheme y teclear en elprompt algunas expresiones. El intérprete analizará la expresión y mostrará el valorresultante de evaluarla.

2(+ 2 3)(+)(+ 2 4 5 6)(+ (* 2 3) (- 3 1))

Las expresiones en Scheme tienen una forma denominada notación prefija de Cambridge(Cambridge prefix notation) (el nombre de Cambridge es por la localidad Cambridge,Massachusets, donde reside el MIT, lugar en el que se ideó el Lisp), en la que la expresiónestá delimitada por paréntesis y el operando va seguido de los operadores.

La sintaxis es la siguiente:

(<función> <arg1> ... <argn>)

En Scheme podemos interpretar los paréntesis abiertos '(' como evaluadores o lanzadores dela función que hay a continuación.

La forma de evaluar una expresión en Scheme es muy sencilla:

1. Evaluar cada uno de los argumentos

Tema 1: Lenguajes de programación

Page 18Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 19: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

2. Aplicar la función nombrada tras el paréntesis a los valores resultantes de la evaluaciónanterior(+ (* 2 3) (- 3 (/ 12 3)))(+ 6 (- 3 (/ 12 3)))(+ 6 (- 3 4))(+ 6 -1)5

Atención, preguntas- ¿En qué orden se evalúan los argumentos?- ¿Influye ese orden en el resultado de la evaluación?

En Scheme los términos función y procedimiento significan lo mismo y se usan de formaintercambiable. Son ejemplos de funciones o procedimientos: +, -, *.

En Scheme la evaluación de una función siempre devuelve un valor, a no ser que se produzcaun error que detiene la evaluación:

(* (+ 3 4) (/ 3 0))

Podemos utilizar la forma especial define para darle un nombre (identificador, símbolo) aun valor. Una vez definido, podemos usar el nombre en lugar del valor. Ya veremos másadelante que esto es equivalente a decir que el símbolo se evalúa al valor.

> (define pi 3.14159)> pi3.14159> (sin (/ pi 2))0.9999999999991198> (define a (+ 2 (* 3 4)))> a14

4.2. ¿Por qué Scheme?

Scheme es un dialecto de Lisp.

Scheme es un lenguaje actual. Existen múltiples proyectos y bibliotecas que se estánimplementando en la actualidad en Scheme. Algunos ejemplos:

• Colección de programas en Scheme(http://www.rodoval.com/paginalen.php?len=Scheme)

• Scheme Gimp (http://gimp.org.es/tutoriales/schemebasic/) , Scheme está dentro de Gimppara extender la herramienta de tratamiento de imágenes

• Recetas en Scheme (http://schemecookbook.org/Cookbook/WebHome)• PLaneT (http://planet.plt-scheme.org/) , un repositorio de paquetes escritos en Scheme.

Tema 1: Lenguajes de programación

Page 19Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 20: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

Scheme es un lenguaje ideal para LPP porque:

• Tiene una sintaxis muy sencilla• Es un lenguaje de script• Tiene múltiples extensiones: programación orientada a objetos, etc.• Es posible de extender mediante macros

Existen a su vez múltiples intérpretes de Scheme, nosotros vamos a usar uno de las másextendidos: MzScheme en el entorno de programación DrScheme(http://www.plt-scheme.org/software/drscheme/) (desarrollados por el grupo PLT Scheme(http://www.plt-scheme.org/) ). Para una breve introducción al lenguaje y al entorno deprogramación consultar el manual A brief tour of DrScheme(http://www.plt-scheme.org/software/drscheme/tour/) escrito por el mismo grupo.

4.3. Algunas primitivas

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

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

Vamos a revisar Scheme desde esta perspectiva.

Las primitivas de Scheme consisten en un conjunto de tipos de datos, formas especiales yfunciones incluidas en el lenguaje. A lo largo del curso iremos introduciendo estasprimitivas. Es un lenguaje no demasiado complejo (a diferencia de otros como C++ o Java).Está descrito completamente en un documento de especificación de 50 páginas llamadoRevised 5 Report on the Algorithmic Language Scheme (se puede consultar en este enlace(http://www.schemers.org/Documents/Standards/R5RS/) ). Las primitivas del lenguaje estándescritas en las 21 páginas del apartado 6 (Standard procedures). En la actualidad estedocumento se encuentra en revisión y en breve se aprobará el estándar 6(http://www.r6rs.org/) .

Vamos a revisar los tipos de datos primitivos de Scheme, así como algunos procedimientosprimitivos para trabajar con valores de esos tipos.

• Booleanos• Números• Caracteres• Cadenas• Símbolos• Parejas y listas (*)

Tema 1: Lenguajes de programación

Page 20Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 21: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

• Vectores (*)• Procedimientos

(*) Los veremos en detalle en futuras clases, cuando hablemos de tipos de datos compuestos.En la clase de hoy sólo veremos unas algunas funciones elementales para crea, recorrer yañadir listas.

Booleanos

#t ; verdadero#f ; falso(> 3 1.5)(= 3 3.0)(equal? 3 3.0)(or (< 3 1.5) #t)(and #t #t #f)(not #f)(not 3)

Atención, aviso- Nótese en los ejemplos la diferencia entre (= 3 3.0) y (equal? 3 3.0).

Números

La cantidad de tipos numéricos que soporta Scheme es grande. Sólo vamos a ver unapequeña parte.

numbercomplexrealrationalinteger

Algunos procedimientos primitivos

(<= 2 3 3 4 5)(max 3 5 10 1000)(/ 22 4)(quotient 22 4)(remainder 22 4)(equal? 0.5 (/ 1 2))(= 0.5 (/ 1 2))(abs (* 3 -2))(floor 3.4) ; relacionados: ceiling, truncate, round(sin 2.2) ; relacionados: cos, tan, asin, acos, atan

Caracteres

#\a#\A#\space#\ñ ; se soportan caracteres internacionales

Tema 1: Lenguajes de programación

Page 21Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 22: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

#\á ; se codifican en UTF-8(char<? #\a #\b)(char-numeric? \#1) ; relacionados: char-alphabetic?

; char-whitespace?, char-upper-case?; char-lower-case?

(char-upcase #\ñ)(char->integer #\space)

Cadenas

Las cadenas son secuencias finitas de caracteres.

"hola""La palabra \"hola\" tiene 4 letras"(make-string 10 #\o)(substring "Hola que tal" 2 4)(string? "hola")(string->list "hola")

Símbolos

Un símbolo es lo que en otros lenguajes se denomina identificador. En Scheme los símbolose identificadores pueden contener caracteres internacionales (Unicode, UTF-8). El intérpreteDrScheme guarda los ficheros de texto en esa codificación.

'hola(symbol 'hola-que<>)(symbol->string 'hola-que<>)'mañana'lápiz ; aunque sea posible, no vamos a usar acentos en los símbolos

; pero sí en los comentarios(symbol? 'hola) ; #t(symbol? "hola") ; #f(equal? 'hola 'hola)(equal? 'hola "hola")

Diferencia entre símbolos y cadenas: un símbolo (identificador) es un objeto simple y unacadena es un objeto compuesto. El intérprete de Scheme codifica un símbolo mediante unúnico número, su valor hash. Otra diferencia bastante clara: un símbolo no puede contener unespacio, pero una cadena sí.

Listas

Uno de los elementos fundamentales de Scheme, y de Lisp, son las listas. Vamos a ver cómodefinir, crear, recorrer y concatenar listas.

(list 1 2 3 4) ; list crea una lista'(1 2 3 4) ; otra forma de definir la misma lista(car '(1 2 3 4)) ; primer elemento de la lista(cdr '(1 2 3 4)) ; resto de la lista'() ; lista vacía(cdr '(1)) ; devuelve la lista vacía(null? (cdr '(1))) ; comprueba si una lista es vacía(append '(1) '(2 3 4) '(5 6)) ; construye una lista nueva concatenando

Tema 1: Lenguajes de programación

Page 22Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 23: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

; los argumentos

Atención, avisoUno de los conceptos más importantes relacionados con las listas es el de lista vacía. Lacomprobación de si una lista es vacía con la función null? es el caso base de gran parte defunciones recursivas que recorren listas.

Procedimientos

Una característica fundamental de Scheme es que los procedimientos son tipos primitivos.Más adelante veremos esto en detalle.

+-remainder

4.4. Extensiones de Scheme

Es posible definir nuevos procedimientos en Scheme (lo explicamos en el siguienteapartado). Vamos a usar también un conjunto de procedimientos definidos en el ficherosimply.scm (programas/simply.scm.zip) . Son procedimientos definidos en el libro 'SimplyScheme: Introducing Computer Science' de Brian Harvey and Matthew Wright.

Los procedimientos que vamos a usar más a menudo son procedimientos para tratar consímbolos y cadenas (composición, primer carácter, etc.): first, butfirst (bf), last,butlast (bl), word, empty? y member?. Además define la función 1+ que incrementa en 1 suargumento.

(load "/home/domingo/simply.scm") ; en Windows: (load "C:\simply.scm")(first 'hola)(butfirst 'hola)(bf 'hola)(last 'hola)(butlast 'hola)(word 'hola 'mundo)(word 12 34)(+ (first 23) 5)(empty? "hola")(empty? (bf "h"))(empty? (bf 'h))(member? 'f 'abcdefg)truefalse(1+ 4)

4.5. Abstracción: define

Las capacidades de abstracción de un lenguaje de programación hacen posible definir nuevos

Tema 1: Lenguajes de programación

Page 23Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 24: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

elementos y darles un nombre. En otros lenguajes de programación (Java, C++, etc.) esposible definir nuevos tipos de datos (clases), definir procedimientos y funciones de esostipos de datos, definir constantes, etc.

En Scheme sólo tenemos una instrucción para definir nuevos elementos: define (másadelante veremos que esto no es completamente cierto, ya que podemos definir macros conla instrucción define-syntax).

Hemos visto que podemos usar define para darle un nombre (identificador, símbolo) a unvalor.

> (define pi 3.14159)> pi3.14159> (sin (/ pi 2))0.9999999999991198> (define a (+ 2 (* 3 4)))> a14

La sintaxis de define es:

(define <símbolo> <expresión>)

La forma especial (define símbolo expresión) se evalúa así:

1. Evaluar expresión2. Asociar el valor resultante de la evaluación anterior con el símbolo

El otro uso de define es para definir nuevos procedimientos (aunque ya veremos másadelante que Scheme utiliza siempre el define anterior, y que esta forma del define no es másque azucar sintáctico).

La sintaxis para definir un procedimiento es:

(define (<nombre-funcion> <args>) <cuerpo>)

Se define una función con el nombre, argumentos y cuerpo dados. El cuerpo es una expresiónde Scheme. El resultado de evaluar la última expresión del cuerpo es el valor devuelto por alfunción.

Ejemplos:

> (define (cuadrado x)(* x x))

> (cuadrado 2)4> (cuadrado 3 4 5) ; error

(define (plural pal)(word pal 's))

> (plural 'perro)

Tema 1: Lenguajes de programación

Page 24Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 25: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

perros> (plural 'arbol)arbols

Algunos ejemplos curiosos (en Scheme los símbolos no están protegidos):

(define suma +)(suma 1)(suma 1 2 3)(define + -)(+ 2 3)(suma 2 3)(define + suma)

Estos ejemplos explican un poco más la idea de que en Scheme los procedimientos sonvalores primitivos. Al hacer (define + -) estamos asociando el identificador '+' alprocedimiento 'resta' que resulta de evaluar el identificador '-'.

4.6. Estructuras de control

El otro elemento comúm a todos los lenguajes de programación (aparte de la abstracción y delas primitivas) es la posibilidad de componer expresiones sencillas en expresionescompuestas.

Hemos visto que una de las características de Scheme es la composición de funciones.Scheme también define estructuras de control que nos permiten seleccionar qué parte de unaexpresión evaluamos en función del resultado de la evaluación de otras.

Las estructuras más importantes de Scheme son el if y el cond para realizar una evaluacióncondicional.

El nombre que reciben en Scheme todas las expresiones que no son procedimientos y quetienen una evaluación especial es forma especial. Ejemplos de formas especiales son:define, if, cond.

Atención, aviso- La expresión (+ (* 2 3) 4) se evalúa de una forma distinta de (define a 3). En el primercaso estamos evaluando llamadas a funciones, y en el segundo evaluamos una forma especial.

4.6.1. Forma especial 'if'

La forma especial if realiza una evaluación condicional de las expresiones que la siguen,según el resultado de una condición.

(define x 3)

Tema 1: Lenguajes de programación

Page 25Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 26: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

(if (> x 5)'mayor-que-cinco'menor-o-igual-que-cinco)

(define (vocal? x)(member? x 'aeiou))

(define (plural pal)(if (vocal? (last pal))

(word pal 's)(word pal 'es)))

Para que un programa Scheme sea legible es muy importante la indentación (tabulación)correcta de sus expresiones.

La sintaxis de if es:

(if <condición> <exp-verdad> <exp-falso>)

El funcionamiento de la forma especial es:

1. Evaluar condición2. Si el resultado es true evaluar exp-verdad3. Sino evaluar exp-falso

(if (> 3 2) (* 2 3) (/ 2 0))

En la expresión anterior la condición es verdadera, por lo que no se evalúa la expresión (/ 2

0) que daría un error. Se evalúa sólo (* 2 3) y se devuelve su resultado.

4.6.2. Forma especial 'cond'

La forma especial cond evalúa una serie de condiciones y devuelve el valor de la expresiónasociada a la primera condición verdadera.

(cond((> 3 4) '3-es-mayor-que-4)((< 2 1) '2-es-menor-que-1)((= 3 1) '3-es-igual-que-1)((= 2 2) '2-es-igual-que-2)((> 3 2) '3-es-mayor-que-2)(else 'ninguna-condicion-es-cierta))

; juego del ding: 1,2,ding,4,5,ding,7,8,ding,10,11,ding,ding,14,ding,...

(define (ding x)(cond

((= (remainder x 3) 0) 'ding)((member? 3 x) 'ding)(else x)))

La sintaxis de cond es la siguiente:

(cond

Tema 1: Lenguajes de programación

Page 26Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 27: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

(<exp-cond-1> <exp-consec-1>)(<exp-cond-2> <exp-consec-2>)...(else <exp-consec-else>))

La semántica es la siguiente:

1. Se evalúan de forma ordenada todas las expresiones hasta que una de ellas devuelva #t

2. Si alguna expresión devuelve #t, se devuelve el valor del consecuente de esa expresión3. Si ninguna expresión es cierta, se devuelve el valor resultante de evaluar el consecuente

del 'else'

Se hace notar- En cualquier caso, sólo se evalúa un único consecuente del cond.

4.6.3. ¿Y los bucles?

En programación funcional pura no existe el concepto de bucle tan extendido en loslenguajes de programación imperativos. Ya veremos que no es necesario si tenemos larecursión. Cualquier función en donde se necesite repetir una sentencia un número de veces(o hasta que se cumpla una determinada condición) se puede expresar de forma recursiva.

Aunque en Scheme existe la forma especial (do ...) que permite implementar un buclenosotros no vamos a usarla. El uso de esta forma especial nos aparta del paradigmafuncional, ya que su semántica no puede definirse con el modelo de sustitución que veremosen las próximas clases.

Por ejemplo, las siguientes funciones son equivalentes. En C, usando un bucle while

suma-hasta (k) {suma=0;j=0;while (j<=k) {

suma = suma+j;j++;

}}

En Scheme, usando la recursión:

(define (suma-hasta k)(if (= k 0)

0(+ k (suma-hasta (- k 1)))))

5. Referencias

Para saber más de los temas que hemos tratado en esta clase puedes consultar las siguientes

Tema 1: Lenguajes de programación

Page 27Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.

Page 28: Tema 1: Lenguajes de programación - dccia.ua.es · implementaban en FORTRAN, las aplicaciones para los negocios en COBOL, las aplicaciones militares en JOVIAL, las de inteligencia

referencias:

• Encyclopedia of Computer Science (Wiley, 2000). Disponible en la biblioteca politécnica(POE R0/E/I/ENC/RAL). Consultar las entradas:• Control structures• Lisp• Programming• Program• Programming languages

• #?rbol genealógico de los lenguajes de programación (http://www.levenez.com./lang)• Abstraction (http://en.wikipedia.org/wiki/Abstraction_%28computer_science%29)

(Wikipedia)• Structure and Interpretation of Computer Programs

(http://mitpress.mit.edu/sicp/full-text/book/book.html) , Abelson y Sussman, MIT Press1996 (pp.1-13). Disponible biblioteca politécnica (acceso al catálogo(http://gaudi.ua.es/uhtbin/boletin/285815) )

• DrScheme (http://www.plt-scheme.org/software/drscheme/)• A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/tour/)

Tema 1: Lenguajes de programación

Page 28Copyright © 2006 Depto. CCIA, Universidad de Alicante All rights reserved.