Lenguajes de programación. Abdiel E. Cáceres González Instituto Tecnológico de Monterrey Campus Ciudad de México Verano 2004
|
|
- Francisca Belmonte Lara
- hace 5 años
- Vistas:
Transcripción
1 Lenguajes de programación Abdiel E. Cáceres González Instituto Tecnológico de Monterrey Campus Ciudad de México Verano 2004 Tower of Babel by Gustav Dore
2 LISP (Antecedentes Históricos) El interés por la inteligencia artificial (IA) comenzó a mediados de los 1950s en diversos lugares alrededor del mundo. Parte de este interés se derivó de la lingüística, parte de la psicología y parte de las matemáticas. 2
3 LISP (Antecedentes Históricos) Los lingüistas estaban interesados en el procesamiento en lenguaje natural. Los psicólogos estaban interesados en modelar el almacenamiento y la recuperación de información de los humanos, junto con otros procesos fundamentales del cerebro. 3
4 LISP (Antecedentes Históricos) Los matemáticos estaban interesados en mecanizar ciertos procesos inteligentes, tales como la demostración de teoremas. 4
5 LISP (Antecedentes Históricos) Todos estos esfuerzos arribaron a la misma conclusión: debe desarrollarse algún método para permitir a las computadoras procesar datos simbólicos en listas (colecciones de celdas de memoria no contiguas que se encadenan con apuntadores). En aquella época, casi todos los procesos computacionales eran con datos numéricos almacenados en estructuras estáticas (arreglos). 5
6 LISP (Antecedentes Históricos) Allen Newell Herbert Simon El concepto de procesamiento de listas fue desarrollado por Allen Newell, J.Cliff Shaw y Herbert Simon. Este concepto se publicó originalmente en un artículo clásico que describe uno de los primeros programas de IA, el Logic Theorist, así como un lenguaje de programación en el cual podía implementarse. 6
7 LISP (Antecedentes Históricos) El lenguaje, llamado IPL-I (Information Processing Language I), nunca fue implementado. La siguiente versión (el IPL-II), se implementó en una computadora Johniac, de la Rand Corporation. 7
8 LISP (Antecedentes Históricos) John McCarthy Marvin Minsky Cuando McCarthy regresó al MIT en el otoño de 1958, él y Marvin Minsky formaron el MIT AI Project, con patrocinio del Laboratorio de Investigación en Electrónica. El primer esfuerzo importante del proyecto fue producir un sistema para procesamiento de listas. 8
9 LISP (Antecedentes Históricos) Este sistema para procesamiento de listas se usó inicialmente para implementar un programa propuesto por McCarthy, llamado el Advice Taker. Esta aplicación se volvió la mayor motivación para desarrollar el lenguaje de programación LISP. En el otoño de 1958, comenzó el desarrollo de LISP con un conjunto de subrutinas primitivas para manejo de listas, que luego formarían parte del ambiente de ejecución del lenguaje. La intención original era desarrollar un compilador como FORTRAN. 9
10 LISP (Antecedentes Históricos) Por lo tanto, para adquirir experiencia en la generación de código, se compilaron (o sea, se tradujeron a ensamblador) a mano diversos programas en LISP. La versión original de LISP (List Processor) se desarrolló en la IBM 704, y es uno de los lenguajes de programación más antiguos que todavía sigue en uso. 10
11 LISP (Antecedentes Históricos) McCarthy se dio cuenta de que las funciones recursivas para procesamiento de listas acompañadas de expresiones condiciones, formaban una base más fácil de entender para la teoría de la computación que otros formalismos tales como las máquinas de Turing. En un artículo (ahora clásico) de 1960 titulado Recursive Functions of Symbolic Expressions and Their Computation by Machine, McCarthy presentó sus ideas a este respecto. Cuando McCarthy exploraba algunos de los alcances de su intérprete de LISP, se dio cuenta de que era posible escribir una función universal de LISP la cual podría interpretar cualquier otra función del lenguaje usando el concepto de recursividad. Puesto que LISP manipula únicamente listas, el poder escribir una función universal requería desarrollar una forma de representar programas en LISP como listas. 11
12 LISP (Antecedentes Históricos) Por ejemplo, la invocación siguiente: f [x+y; u*z] se representaría mediante una lista cuyo primer elemento es f y cuyos segundo y tercer elemento serían listas representando x+y y u*z. En LISP, esta lista se escribe como: (f (+ x y) (* u z)) A esta notación similar a la de Algol (p.ej., f[x+y; u*z]) se les llama expresiones- M (por metalenguaje ), y a la notación de lista se le llama expresiones-s (por lenguaje simbólico ) 12
13 LISP (Antecedentes Históricos) Una vez que se diseñó la representación de las listas y que se escribió la función universal, uno de los miembros del proyecto se percató de que, en efecto, lo que resultó fue un intérprete del mismo lenguaje. Por lo tanto, tradujo la función universal a ensamblador y la ligó a las subrutinas para manejo de listas. Así nació la primera implementación de LISP. Esta implementación requería que los programas se escribieran en forma de expresiones-s, pero esto se vio como un inconveniente temporal. El sistema de LISP 2 (similar a Algol) que se estaba desarrollando en aquel entonces permitiría el uso de expresiones-m. 13
14 LISP (Antecedentes Históricos) Sin embargo, este sistema nunca se terminó, y los programadores de LISP, hasta la fecha, siguen escribiendo sus programas usando expresiones-s. Aunque esto fue una cuestión incidental, irónicamente, el uso de expresiones-s se considera como una de las mayores ventajas de LISP. LISP sigue siendo un lenguaje popular hasta nuestros días, y existen incontables versiones de este lenguaje para todo tipo de plataformas. Un comité ANSI definió un estándar para el denominado COMMON LISP hace varios años. 14
15 LISP (Antecedentes Históricos) El uso de LISP en inteligencia artificial sigue siendo muy extensivo, y se le considera como una piedra angular en el procesamiento en lenguaje natural y otras aplicaciones de IA. En sus orígenes, sin embargo, el LISP fue severamente criticado por su ineficiencia, que lo hacía impráctico para aplicaciones del mundo real. Sin embargo, con los años se han desarrollado diversos compiladores para el lenguaje, lo que lo ha vuelto más atractivo para aplicaciones comerciales. 15
16 LISP (Antecedentes Históricos) Gerald Jay Sussman En 1975, Gerald Jay Sussman y Guy Lewis Steele, Jr., eran estudiantes de posgrado en el MIT, interesados en la teoría de actores desarrollada por Carl Hewitt. El modelo de Hewitt estaba fuertemente influenciado por Smalltalk, y los actores eran muy similares a los objetos de este lenguaje. 16
17 LISP (Antecedentes Históricos) Los actores eran capaces de comunicarse entre sí a través de mensajes y contaban con una identidad. Para realizar sus experimentos, Sussman y Steele decidieron desarrollar un dialecto de LISP que tuviera reglas de entorno estático (siguiendo el modelo de Algol). 17
18 LISP (Antecedentes Históricos) El resultado fue un mini-intérprete al que denominaron Schemer. Sin embargo, debido a que el sistema operativo ITS de la máquina donde desarrollaron este intérprete limitaba los nombres de los archivos a seis caracteres, decidieron reducir este apelativo a Scheme. 18
19 LISP (Antecedentes Históricos) Con la idea en mente de tener una herramienta más útil para la IA, Sussman y Steele extendieron este lenguaje un poco más y posteriormente publicaron una serie de artículos seminales en los que explicaron la forma en que Scheme era capaz de soportar todos los paradigmas de la época: funcional, imperativo y orientado a objetos. Desde entonces, Scheme ha sido revisado varias veces, y su uso se ha extendido a través de un sinnúmero de universidades en todo el mundo. 19
20 LISP usa una sintaxis basada totalmente en paréntesis, y no tiene necesidad de las complejas reglas de precedencia que suelen requerirse en la mayor parte de los lenguajes de programación convencionales. Esto permite a los estudiantes de este lenguaje concentrarse en las estructuras de datos y no en la sintaxis del lenguaje, como suele ocurrir cuando se programa en otro tipo de paradigmas. 20
21 LISP usa notación Polaca (llamada también prefija), de acuerdo a la cual un operador debe escribirse antes de sus operandos. Por ejemplo: (+ 3 4) Debe destacarse, sin embargo, que la notación de LISP es un poco más flexible que la notación prefija tradicional, ya que expresiones tales como: son perfectamente válidas. ( ) 21
22 Las expresiones condicionales son similares al if..then..else : (cond ((null x) 0 ((eq (car x) (car y)) (f (car x))) (t (g (car y))) ) En este caso, se checa primero si la lista x es nula (o sea, si está vacía). Si ese es el caso, la función regresa (). De lo contrario, checamos si el car (o sea, el primer elemento) de la lista es igual a (car y). Si ese es el caso, entonces regresamos (f (car x)). De lo contrario, la lista después de la parte t (true) se ejecuta, lo que significa que se invoca (g (car y)). 22
23 LISP es usualmente un lenguaje interpretado. La mayor parte de los sistemas de LISP de la actualidad son intérpretes interactivos, aunque existen también varios compiladores. De hecho, cabe destacar que hay al menos una computadora cuya arquitectura se inspiró en este lenguaje de programación. El único constructor de estructuras de datos en LISP es la lista. Puesto que una de las metas de LISP fue el permitir la computación con datos simbólicos, se le permite al programador manipular listas de datos. Algunas versiones de LISP permiten el uso de registros y arreglos, pero el LISP puro sólo lidia con listas. 23
24 Esto ilustra el Principio de la Simplicidad, ya que el programador no tiene que elegir de entre varios constructores, ya que sólo hay uno disponible. Las listas son, además, muy fáciles de construir: (list a b c d) ==> (a b c d) Todos los objetos del lenguaje son ciudadanos de primera clase. Esto significa que todos sus objetos pueden pasarse como argumentos, se pueden manipular dentro de una estructura de datos, pueden ser regresados por una función y básicamente nunca mueren (hasta que la recolección de basura se hace cargo de ellos). 24
25 Las aplicaciones de funciones y listas son muy similares. Aun los programas en LISP son listas. Bajo la mayor parte de las circunstancias, una expresión-s se interpreta como una aplicación de una función, lo que significa que se evalúan sus argumentos y se invoca la función. El hecho de que LISP represente tanto los programas como los datos de la misma manera es de una enorme importancia (y representa una característica casi única en los lenguajes de programación). Esta flexibilidad hace que sea extremadamente fácil escribir un intérprete de LISP en LISP. Más importante todavía, es el hecho de que esto hace muy conveniente tener un programa en LISP que genere e invoque a otro programa en LISP. También simplifica la escritura de programas en LISP que transformen y manipulen a otros programas en este lenguaje. Estas características son importantes para las aplicaciones de inteligencia artificial y otros ambientes avanzados de desarrollo de software. 25
26 Funciones tales como eq son denominadas funciones puras o simplemente funciones, debido a que no tienen otro efecto más que el de calcular un valor. Sin embargo, algunas funciones de LISP son pseudo-funciones (o procedimientos ), porque tienen efectos colaterales además de calcular un cierto valor. Un ejemplo de procedimiento es set, que asocia un nombre a un valor: set símbolo valor Esto permite la alteración del valor de una variable dinámica (especial). 26
27 set hace que la variable dinámica símbolo tome el valor definido por valor. Puesto que set se considera una función impura. LISP proporciona otro mecanismo para asociar valores con símbolos, llamado let, el cual no tiene efectos colaterales: (let ((c 4)) 27
28 Otra pseudo-función importante es defun, que permite definir una función: (defun fibonacci (n) (if (or (= n 0) (= n 1)) 1 (+ (fibonacci (- n 1)) (fibonacci (- n 2))))) 28
29 Los dialectos de LISP difieren en pequeños detalles entre sí. En particular, la aplicación de funciones usada para definir funciones es diferente en muchos dialectos, aunque las formas antes presentadas corresponden a COMMON LISP, que es la versión estándar del lenguaje. 29
30 Las estructuras de datos en LISP pueden clasificarse en dos grupos: Primitivas Constructores El constructor es la lista, la cual permite estructuras complicadas a partir de estructuras simples. Las estructuras primitivas se llaman átomos en LISP ( átomo en griego significa indivisible). Hay al menos dos tipos de átomos: numéricos y no numéricos. 30
31 Los átomos numéricos tienen la sintaxis de los números (o sea, son dígitos, posiblemente con un punto decimal). Ejemplos de átomos numéricos: +, -, *, /, sub1, add1, max, min, =, <, >, sqrt, log, expt, abs, sin, cos, tan, asin, acos, etc. Los átomos no numéricos son cadenas de caracteres que se pretendía originalmente que representaran palabras o símbolos. Ejemplos de átomos no numéricos: Carlos, x, hola, mi-atomo-unico, etc. 31
32 Con unas pocas excepciones, las únicas operaciones que pueden efectuarse sobre átomos no numéricos son comparaciones de igualdad y desigualdad. Esto se hace con la función eq : (eq x y) eq regresa t (cierto) si x es igual a y, y nil (falso) de lo contrario. Algunas versiones de LISP proporcionan tipos adicionales de átomos, tales como las cadenas. En estos casos, se proporcionan también operaciones especiales para manipular estos objetos. Ejemplos: string=, string<, string>, string <=, string>=, makestring, string-upcase, string-downcase, etc. 32
33 El método de estructuración de datos que proporciona LISP es llamado list. Las listas se escriben en forma de expresiones-s, rodeando con paréntesis los elementos de las mismas, los cuales se separan mediante espacios en blanco. Las listas pueden tener cero, uno o más elementos, lo que sigue el Principio Cero-Uno-Infinito. Los elementos de las listas pueden a su vez ser listas también, de forma que este mismo principio se satisface para el nivel de anidamiento de las listas. 33
34 Por razones históricas, se considera a la lista vacía () como equivalente al átomo nil. Es decir: regresan, en ambos casos, cierto. (eq '() nil) (null '()) Por esta razón, a la lista vacía se le suele denominar null list. Con la excepción de la lista vacía, todas las listas son no atómicas (es decir, no son átomos). Algunas veces se les denomina valores de datos compuestos. 34
35 Puede averiguarse si algo es un átomo usando el predicado atom : (atom 'c) t (atom '(()) ) nil 35
36 Puesto que las listas son el método principal de estructuramiento de datos en LISP, el lenguaje proporciona también una serie de constructores (es decir, operaciones usadas para construir listas) y selectores (o sea, operaciones usadas para separar listas). LISP tiene un constructor (cons) y dos selectores (car y cdr). El primer elemento de una lista se selecciona usando car : (car '(mi nombre es Abdiel)) mi 36
37 El primer elemento de una lista puede ser un átomo o una lista, y car lo retornará, sin importar su naturaleza: (car '((mi) (nombre) (es) (Abdiel))) '(mi) Debe advertirse que el primer argumento de car debe ser una lista no vacía (de lo contrario, no podría tener un primer elemento y LISP retornaría un mensaje de error). Además, car puede regresar un átomo o una lista, dependiendo del argumento que sea el primer elemento de la lista a la que se aplique. 37
38 La función cdr regresa toda la lista, excepto su primer elemento. Por ejemplo: (cdr '(mi nombre es Abdiel)) '(nombre es Abdiel) También cdr requiere que su argumento sea una lista no vacía (de lo contrario no podríamos remover su primer elemento, y LISP proporcionaría un mensaje de error). Sin embargo, a diferencia de car, cdr SIEMPRE regresa una lista, aunque ésta podría ser la lista vacía en caso de que el argumento tenga un solo elemento. Ejemplo: (cdr '(Abdiel)) '() 38
39 Es importante hacer notar que car y cdr son funciones puras. Es decir, no modifican su argumento. Puede considerarse que durante su operación utilizan una copia de la lista que se les pasa como argumento. Por ejemplo, cdr no borra realmente el primer elemento de una lista sino que regresa una lista idéntica a su argumento, si bien ésta carece del primer elemento. El único constructor de LISP, cons, agrega un nuevo elemento al inicio de una lista. Por ejemplo: (cons 'mi '(nombre es Abdiel)) '(mi nombre es Abdiel) 39
40 Advierta que cons es realmente el inverso de car y cdr : (car '(my name is Abdiel)) 'my (cdr '(my name is Abdiel)) '(name is Abdiel) (cons 'my '(name is Abdiel)) '(my name is Abdiel) 40
41 Por lo tanto, cualquier lista que podamos construir, también la podemos separar y viceversa. Al igual que car y cdr, cons es una función pura. Esto significa que realmente no agrega nuevos elementos al inicio de su segundo argumento, sino que actúa como si hubiese construido una lista completamente nueva cuyo primer elemento es el argumento pasado a cons y el resto de esos elementos se copian de su segundo argumento. 41
42 Las listas suelen construirse recursivamente. Si hacemos: el resultado es: (cons '(a b) '(c d)) '((a b) c d)) Esto es debido a que el primer elemento que se agregó es una lista y no un átomo. Sin embargo, probablemente lo que el programador quería hacer era generar la lista (a b c d) 42
43 Para hacer eso, necesitaríamos una función llamada append : (append '(a b) '(c d)) '(a b c d) 43
44 La definición de append es muy sencilla: (defun append (list1 list2) (cond ((null list1) list2) (t (cons (car list1) (append (cdr list1) list2)) )) ) Esta solución es muy compacta y elegante; hace uso de recursividad de las primitivas para manejo de listas que vimos anteriormente. 44
45 Ejercicio A Evalúe las siguientes formas: (first (p h w)) (rest (b k p h)) (first (rest ((a b) n (c d)))) (first (rest (first (rest ((a b) (c d) (e f)))))) 45
46 Ejercicio B Escriba secuencias car y cdr para extraer el símbolo pera de cada una de las siguientes expresiones (manzana naranja pera uva) (((manzana (naranja) (pera) (uva))) 46
Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN
Dr. Carlos A. Coello Coello Departamento de Computación CINVESTAV IPN ccoello@cs.cinvestav.mx Representación de los Registros de Activación Se usa un sistema de coordenadas en dos dimensiones para identificar
Programación Funcional en LISP Lógica para Ciencias de la Computación
Programación Funcional en LISP Lógica para Ciencias de la Computación Primer Cuatrimestre de 2009 Material Adicional Introducción A lo largo de la carrera estudiaremos diversos paradigmas de programación:
CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional
CAPÍTULO IV: Programación Funcional 4.1 Introducción a la Programación Funcional 1 Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones
Lenguajes de Programación Programación funcional
Lenguajes de Programación Programación funcional Roberto Bonvallet Departamento de Informática Universidad Técnica Federico Santa María Concepto de función En el paradigma imperativo: Una función es una
Breve introducción al funcionamiento de un interprete del lenguaje Lisp
Breve introducción al funcionamiento de un interprete del lenguaje Lisp Christian Chinchilla Brizuela Escuela Ciencias de la Computación e Informática Universidad de Costa Rica San José, Costa Rica christian.chinchilla@ecci.ucr.ac.cr
Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional
Programación Funcional Lisp-DrScheme Primera Parte Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional Programación Funcional! La programación funcional es un paradigma de programación
Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca
Aplicación de la Inducción Matemática Programación Funcional Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca Motivación Programación Imperativa Declarativa Procedimental Ejemplo:
GUÍA BÁSICA DE SCHEME v.4
Esta guía básica pretende ser una introducción elemental al lenguaje de programación Scheme. Se presenta como una guía de comienzo rápido de tal forma que permita conocer de una forma muy esquemática los
Abstracción de Datos y
Capítulo 3 Abstracción de Datos y Números El cómputo numérico ha sido tradicionalmente ignorado por la comunidad de Lisp. Hasta antes del Common Lisp nadie había ideado una estrategia detallada para ordenar
COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO
COLEGIO DE ESTUDIOS DE POSGRADO DE LA CIUDAD DE MÉXICO ELABORO: ALEJANDRA FUERTES FRANCISCO TEMA: LENGUAJES DE PROGRAMACIÓN INTRODUCCIÓN Un lenguaje de programación es un conjunto de instrucciones que
PROGRAMACIÓN DECLARATIVA
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA CUARTO CURSO PRIMER CUATRIMESTRE Tema 1.-
Algoritmos y programas. Algoritmos y Estructuras de Datos I
Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de
Tema 3: Características de la programación funcional. Sesión 6: El paradigma funcional (2)
Tema 3: Características de la programación funcional Sesión 6: El paradigma funcional (2) Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z- H-10.html#%_sec_1.1.5][The
Procedimientos Definidos Localmente
Capítulo 5 Procedimientos Definidos Localmente 5.1 Distinguiendo entre definiciones globales ylocales Todas las primitivas (o procedimientos) disponibles en Scheme (p.ej., car, cons, cdr, etc.) se definen
Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3
PROGRAMACION FUNCIONAL - Un lenguaje de programación funcional tiene gran flexibilidad, es conciso en su notación y su semántica es sencilla. El inconveniente principal de estos lenguajes ha sido la ineficiencia
Augusta Ada Byron Mayor conocida como Ada Lovelace. A Ada se le atribuyó el papel de asistente/transcriptora de Babbage; sin embargo, hoy en día, es c
Augusta Ada Byron Mayor conocida como Ada Lovelace. A Ada se le atribuyó el papel de asistente/transcriptora de Babbage; sin embargo, hoy en día, es considerada como la madre de la programación. Ella diseñó
Introducción a la programación
Introducción a la programación Conceptos Básicos El objetivo fundamental de éste curso es enseñar a resolver problemas mediante una computadora. El programador de computadoras es antes que nada una persona
Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3: 3 - Paradigmas de Programación
3 - Paradigmas de Programación En los inicios los lenguajes de programación imitaron y abstrajeron las operaciones de una computadora, lo cual trajo aparejado que el tipo de computadora para el cual fueron
PRIMER TUTORIAL DE LipsWorks Personal Edition 6.0.1
PRIMER TUTORIAL DE LipsWorks Personal Edition 6.0.1 Interprete 1. Realizar una suma Tipos de Datos Existen 2 Tipos de datos Átomos y Listas Datos Tipo Átomos: Los átomos son las expresiones LISP más elementales.
Programación Declarativa
Programación Declarativa Tema 2: LISP (SCHEME) 2 Tema 2: LISP (SCHEME) Introducción Representación de Datos Definición de Funciones Predicados Listas 3 Introducción (I) SCHEME es un dialecto de LISP (LISt
CONTENIDO. 1.- Introducción a la Inteligencia Artificial (IA) 2.- Lógica de predicados. 3.- Búsqueda de soluciones
CONTENIDO 1.- Introducción a la Inteligencia Artificial (IA) 2.- Lógica de predicados 3.- Búsqueda de soluciones 4.- Lenguajes de IA e Introducción a Sistemas Expertos 1.- Introducción a la Inteligencia
Tema 6: Estructuras de datos recursivas
Tema 6: Estructuras de datos recursivas Índice 1 Listas jerárquicas...2 2 Árboles binarios... 4 3 Árboles genéricos...7 4 Referencias...10 1. Listas jerárquicas Las listas tienen la propiedad de la clausura
Prof. María Alejandra Quintero. Informática Año
Prof. María Alejandra Quintero Informática Año 2014-2015 Es la acción de escribir programas de computación con el objetivo de resolver un determinado problema. Implica escribir instrucciones para indicarle
Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo
Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten
Lenguajes y paradigmas de programación
Lenguajes y paradigmas de programación Temas Que es un programa? Que es un lenguaje de programación? Características de los lenguajes de programación Paradigmas de programación Que es un programa? La unión
Metodologías de Programación II Listas en Lisp
Metodologías de Programación II Listas en Lisp Dr. Alejandro Guerra-Hernández Departamento de Inteligencia Artificial Facultad de Física e Inteligencia Artificial aguerra@uv.mx http://www.uv.mx/aguerra
Tema 2.- Expresiones y funciones
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Lógica: Algoritmo: Archivo: Base de datos: Bit:
Lógica: Algoritmo: Archivo: Base de datos: Bit: 1 LÓGICA: Es una secuencia de operaciones realizadas por el hardware o por el software. Lógica del hardware, Son los circuitos y Chips que realizan las operaciones
DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia:
UNIVERSIDAD AUTÓNOMA DE CHIHUAHUA Clave: Clave: FACULTAD DE INGENIERÍA PROGRAMA DEL CURSO: PARADIGMAS DE DES: Programa(s) Educativo(s): Tipo de materia: Clave de la materia: Ingeniería Ingeniería de Software
UNIDAD I.- INTRODUCCIÓN
UNIDAD I.- INTRODUCCIÓN LECCIÓN 1.1.- El propósito de la Inteligencia Artificial y su evolución histórica 1.1.1.- Inteligencia ÁREAS QUE ESTUDIAN LA INTELIGENCIA: Psicología y la filosofía. para qué la
Lenguajes de Programación
Lenguajes de ción Bloque 1. Complemento a Tema 1 1. Historia 2. Paradigmas de programación 3. Fases creación de un programa 4. Traducción: compilación e interpretación 1ª Generación Ordenadores sólo entienden
Unidad II: Análisis semántico
Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico
Funciones Segunda parte
Expresiones condicionales Matemática Discreta usando el computador 2011 Funciones Segunda parte Una expresión condicional utiliza una expresión de tipo Bool para decidir entre dos opciones Estructura if...then...
Prefacio 25 Organización de la Unidad Didáctica Cómo utilizar el libro Objetivos docentes... 27
ÍNDICE Prefacio 25 Organización de la Unidad Didáctica.................... 25 Cómo utilizar el libro............................. 26 Objetivos docentes.............................. 27 1 Fundamentos de
TUTORIAL PROLOG. Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato
TUTORIAL PROLOG Lenguajes de programación Universidad Nacional de Colombia Santiago Carvajal Castañeda Mario Andrés Moreno Norato Prolog es un lenguaje de programación lógica de propósito general que se
Principios de diseño de lenguajes
Capítulo 1 Principios de diseño de lenguajes Objetivo El alumno describirá los procedimientos y gramáticas empleadas en el diseño de los lenguajes de programación. Figura 1.1: Preguntas incómodas 1.1.
Conceptos básicos. IC-1800 Introducción a la programación. I semestre,
Conceptos básicos IC-1800 Introducción a la programación I semestre, 2016 1 Definiciones Básicas Hardware: componentes físicos. tangibles Software: componentes lógicos. no tangibles DVDs de Ubuntu, Kubuntu
Unidad I: Organización del Computador. Ing. Marglorie Colina
Unidad I: Organización del Computador Ing. Marglorie Colina Arquitectura del Computador Atributos de un sistema que son visibles a un programador (Conjunto de Instrucciones, Cantidad de bits para representar
Evolución del software y su situación actual
Evolución del software y su situación actual El software es el conjunto de programas que permite emplear la PC, es decir, es el medio de comunicación con la computadora, el control de sus funciones y su
Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2017 Paradigma Funcional FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2)
Conceptos básicos. IC-1800 Introducción a la programación. I semestre,
Conceptos básicos IC-1800 Introducción a la programación I semestre, 2017 1 Definiciones Básicas Hardware: componentes físicos. tangibles Software: componentes lógicos. no tangibles DVDs de Ubuntu, Kubuntu
Lenguajes de Programación I
Lenguajes de Programación I Tipos de Datos Ernesto Hernández-Novich Copyright c 2006-2010 Tipos de Datos El computador sólo manipula secuencias de bits. Los lenguajes de programación ofrecen
ANEXO XVII DE LA RESOLUCION N
Hoja 1 de 7 UNIVERSIDAD NACIONAL DE CÓRDOBA Facultad de Ciencias Exactas Físicas y Naturales República Argentina Programa de: Código: Informática Carrera: Materia común Res. Nº Plan: Puntos:3.5 Escuela:
Inteligencia Artificial
Inteligencia Artificial Conjunto de técnicas que se aplican en el diseño de programas de computador para la resolución de problemas que por su dificultad requieren el uso de un cierto grado de inteligencia.
Tema 4.- Recursión e iteración
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
PROGRAMA DE CURSO. Horas de Trabajo Personal ,5 5,5
Código Nombre CC4101 Lenguajes de Programación Nombre en Inglés Programming Languages SCT PROGRAMA DE CURSO Unidades Docentes Horas de Cátedra Horas Docencia Auxiliar Horas de Trabajo Personal 6 10 3 1,5
UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM
UNIDAD IV Programación Funcional Porqué? 2 Introducción Porque aprender programación funcional? - Recursión - Abstracción funcional - Funciones de primer orden Estos conceptos se han incorporado en la
Tema 3.- Predicados y sentencias condicionales
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA ESPECIALIDAD DE COMPUTACIÓN CUARTO CURSO PRIMER
Introducción a la programación
1 Introducción a la programación Marduk Bolaños Puchet Miércoles 28 de agosto de 2012 Parte I Algoritmos y programación Algoritmos y programación 2 Algoritmo Un algoritmo es una secuencia ordenada, finita
SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos
TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus
Lenguajes de programación
Lenguajes de programación por Iván Cruz A través de la historia, el hombre siempre ha buscado la manera de comunicarse con otros seres vivos, debido a ello se crearon diversas formas de comunicación, tales
INICIACIÓN A LA PROGRAMACIÓN 1ª parte
TEMA 4 INICIACIÓN A LA PROGRAMACIÓN 1ª parte Qué es la programación? La programación es el proceso de diseñar, codificar, depurar y mantener el código fuente de programas computacionales. En la actualidad,
Examen Lenguajes de Programación (CC41A)
Examen Lenguajes de Programación (CC41A) Departamento de Ciencias de la Computación Universidad de Chile Profesor: Éric Tanter 21 de Noviembre 2007 (2 horas) sin apuntes 1. (1.5pt) Considere la función
Tipos de datos algebraicos
Tipos de datos algebraicos Taller de Álgebra I Segundo cuatrimestre de 2013 Programación funcional Recordemos que un tipo de datos es un conjunto dotado con una serie de operaciones sobre los elementos
Lenguajes de Programación I
Lenguajes de Programación I Control de Flujo - Expresiones Ernesto Hernández-Novich Copyright c 2006-2010 Definición El Control de Flujo es fundamental para la mayoría de los modelos de cómputo,
Entendiendo expresiones lambda en C# con Mono
Entendiendo expresiones lambda en C# con Mono Martín O. Márquez Introducción La programación imperativa es uno de los paradigmas de computación más ampliamente utilizados por la mayoría
Manual de Lisp para IACS (Curso 91 92)
Dpto. de Álgebra, Computación, Geometría y Topología Universidad de Sevilla Manual de Lisp para IACS (Curso 91 92) Sevilla, 1992 Contenido 1 Introducción 1 1.1 Introducción............................
Tema 3: Características de la programación funcional
Tema 3: Características de la programación funcional Sesión 5: El paradigma funcional (1) martes 22 de febrero de 2011 Referencias Capítulo 1.1.5 SICP: [[http://mitpress.mit.edu/sicp/full-text/book/book-z-
Subrutinas. Subrutinas. Erwin Meza Vega
Subrutinas Erwin Meza Vega Outline 1 Introducción 2 Especicación de subrutinas 3 Funciones booleanas 4 Parámetros 5 Recursividad 6 Ejercicios Introducción Programación divide y vencerás Cuando la solución
Conceptos básicos sobre gramáticas
Procesamiento de Lenguajes (PL) Curso 2014/2015 Conceptos básicos sobre gramáticas Gramáticas y lenguajes Gramáticas Dado un alfabeto Σ, un lenguaje es un conjunto (finito o infinito) de cadenas de símbolos
Esp. Alexis Olvany Torres ch. Datos de salida. Datos de salida. Datos de salida
Tiempo de Ejecución fuente Descripción abstracta del comportamiento de un programa Máquina abstracta objeto Descripción del comportamiento de un programa independiente de máquina pero fácil de implementar
Introducción a la programación. Cecilia Manzino
Paradigmas Un paradigma es un modelo o patrón en cualquier disciplina científica. Un paradigma de programación representa un estilo de programación en cual se escriben soluciones a problemas en términos
Introducción a los compiladores
Introducción a los compiladores William Cruz-Santos wdelacruzd@uaemex.mx Ingeniería en Computación Universidad Autónoma del Estado de México Unidad de Competencia I 2 de octubre de 2015 William Cruz-Santos
Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)
Tags Fundamentos PHP La Sintaxis de PHP se deriva de muchos lenguajes de programación principalmente de C pero Perl también ha tenido mucha influencia en esta sintaxis Con las últimas incorporaciones agregadas,
Inteligencia Artificial Plan 2010-Ingeniería en Sistemas Computacionales
Inteligencia Artificial Plan 2010-Ingeniería en Sistemas Computacionales Rafael Vázquez Pérez Unidad 1: Fundamentos de Inteligencia Artificial 1.1. Historia de la IA. 1.2. Conceptos y técnicas (Estado
Tema 03: Programación estructurada
Tema 03: Programación estructurada M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido
Algoritmos y Lenguajes de Programación
Introducción y horario Algoritmos y Lenguajes de Programación 543242-2 mariomedina@udec.cl Código: 543242-2 Carrera: Ing. Civil Electrónica Clases 7 de Marzo a 28 de Junio Horario clases Martes, 9:10 a
Tema 9: Asignación, estado local y modelo de entornos
Tema 9: Asignación, estado local y modelo de entornos Índice 1 Programación imperativa... 2 2 Formas especiales set!...3 3 Entornos... 3 4 Estado local...8 4.1 Ejemplo 1: contador global... 8 4.2 Ejemplo
Un. VI. Generador de código intermedio.
Un. VI. Generador de código intermedio. La administración de la memoria se da en esta etapa. Se debe considerar tanto la memoria estática como dinámica, y en esta se utilizan generalmente pilas. Los lenguajes
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN CONTENIDO DE CURSO
A. IDIOMA DE ELABORACIÓN Español ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL B. DESCRIPCIÓN DEL CURSO El curso presenta a los estudiantes estrategias para resolver problemas comunes en diversas profesiones
Tema 1. Introducción
Departamento de Tecnologías de la Información Tema 1 Introducción Ciencias de la Computación e Inteligencia Artificial Índice 1.1 Conceptos 1.2 Un poco de historia 1.3 Estructura de un compilador 1.4 Teoría
Tema 4: Programación funcional avanzada en Scheme
Tema 4: Programación funcional avanzada en Scheme Índice 1 Let... 2 2 Let*... 5 3 Letrec... 5 4 Quote...6 5 Eval... 7 6 Datos compuestos: parejas...8 7 Los datos compuestos pueden ser funciones...11 8
Programación Funcional: F# Brayan Esteban Garzón Federico Gómez Juan Camilo Lozano
Programación Funcional: F# Brayan Esteban Garzón Federico Gómez Juan Camilo Lozano Contenido de la presentación Conceptos clave y principales características Por qué F#? Referencia del Lenguaje Ejemplos
Capítulo 3. Introducción a la programación. Continuar
Capítulo 3 Introducción a la programación Continuar Introducción Java es un lenguaje que tiene muchas ventajas frente a otros lenguajes de programación: es open source (código abierto), esto permite ver
Programación de Sistemas. Unidad 6. Macro Procesador
Programación de Sistemas Unidad 6. Macro Procesador Contenido Introducción Algoritmos y Estructuras Características Independientes de la Máquina Opciones de Diseño Introducción Introducción Una macro instrucción,
Facultad de Ciencias de la Computación INTRODUCCIÓN A LA DISCIPLINA COMPUTACIONAL
Facultad de Ciencias de la Computación INTRODUCCIÓN A LA DISCIPLINA COMPUTACIONAL Cortéz José Italo. Garcés Báez Alfonso Marcial Castillo Luis René. Molina García Ma. del Consuelo. Rivera Martínez Marcela.
Presentación del Curso Presencial. Programación en Java Nivel Básico
Presentación del Curso Presencial Programación en Java Nivel Básico Tabla de contenido Presentación del curso... 3 Objetivos de aprendizaje... 6 Contenidos del curso... 7 Competencias previas... 9 Recursos...
CONCEPTOS BÁSICOS. Prof. Ing. M.Sc. Fulbia Torres
CONCEPTOS BÁSICOS ESTRUCTURAS DE DATOS 2006 Prof. UNIDAD I CONCEPTOS BÁSICOS Datos. Información. Estructuras de Datos. Operaciones sobre una estructura. Perspectivas o niveles de datos. Implementación
Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018
Paradigma Funcional Caso de estudio: ML Lenguajes de Programación 2018 FUNCIÓN: Mapeo de un dominio en un rango El mapeo se puede describir por medio de una EXPRESIÓN f(1) = 2 f(2) = 3 Enumeración f(x)
Tema: Sobrecarga. Objetivos. Materiales y Equipo. Introducción Teórica. Programación II. Guía No. 7
Programación II. Guía No. 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga. Objetivos Describir como redefinir (sobrecargar) operadores para que funcionen con
Inteligencia Artificial Plan 2010-Ingeniería en Sistemas Computacionales
Inteligencia Artificial Plan 2010-Ingeniería en Sistemas Computacionales Rafael Vázquez Pérez Unidad 1: Fundamentos de Inteligencia Artificial 1.1. Historia de la IA. 1.2. Conceptos y técnicas (Estado
Ficha de Aprendizaje N 13
Ficha de Aprendizaje N 13 Curso: Lógica y lenguaje de programación Tema: Fundamentos de programación Duración: 2 horas pedagógicas Logros de aprendizaje Identifica los diferentes tipos de operadores que
UNIDAD4. 1. Procedimentales 2. No Procedimentales
UNIDAD4 Concepto de Clasificación de Lenguajes Concepto: Un lenguaje de consulta es un lenguaje en el que un usuario solicita información de la base de datos. Estos lenguajes son normalmente de más alto
Tema 1: Introducción a las Computadores y Lenguajes de. Programa
Tema 1: Introducción a las Computadores y Lenguajes de programación: Paradigmas de la programación. Programa Arquitectura del Computador Input Células de memoria Información (words) Dirección Output w
Principios de Computadoras II
Departamento de Ingeniería Electrónica y Computadoras Ing. Ricardo Coppo rcoppo@uns.edu.ar Qué es un Objeto? Un objeto es una instancia de una clase Las clases actuán como modelos que permiten la creación
Programación Funcional
Alberto Pardo Marcos Viera Instituto de Computación, Facultad de Ingeniería Universidad de la República, Uruguay Objetivo del curso Este es un curso introductorio de programación funcional (PF) Veremos
Programación TADs Colecciones Conjuntos, Diccionarios y Tablas
Programación 2 8 - TADs Colecciones Conjuntos, Diccionarios y Tablas 1 El TAD SET (Conjunto) En el diseño de algoritmos, la noción de conjunto es usada como base para la formulación de tipos de datos abstractos
Lenguajes y Compiladores Introducción. Compiladores 1
Facultad de Ingeniería de Sistemas Lenguajes y Introducción 1 Objetivos Conocer los fundamentos de construcción de en todas sus fases, presentando los conceptos básicos, definiciones formales, técnicas
Introducción a la Programación en C
Christopher Expósito-Izquierdo cexposit@ull.edu.es Airam Expósito-Márquez aexposim@ull.edu.es Israel López-Plata ilopezpl@ull.edu.es Belén Melián-Batista mbmelian@ull.edu.es José Marcos Moreno-Vega jmmoreno@ull.edu.es
Introducción a Python. Cecilia Manzino
Características del lenguaje Es un lenguaje de programación multiparadigma, soporta la programación orientada a objetos, imperativa y, en menor medida, funcional. Es un lenguaje multiplataforma, puede
Laboratorio de Lenguajes de Programación Introducción al lenguaje ML
Laboratorio de Lenguajes de Programación Introducción al lenguaje ML Pedro A. Góngora Luna 1 1. Tipos de datos básicos Para iniciar el intérprete utilizamos el comando sml en el shell de windows o unix:
Programación 1 - Práctica 0, recargada.
v.6.2.1 Programación 1 - Práctica 0, recargada. Ahora con más ejercicios! 1 Expresiones aritméticas. 1. Considere las siguientes expresiones aritméticas: 12 * 5-7 * 6 3 * 5-7 * 4 / 14 + 3 / 1 cos(0.8)
PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88
PROGRAMACIÓN EN ASSEMBLER SIMULADOR MSX88 REPASO CONCEPTO DE PROGRAMA ANTES se tenían sistemas cableados Datos Secuencia de funciones aritmético/lógicas Resultados Programación en hardware: cuando cambiamos
Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.
Universidad Rafael Urdaneta Escuela de Ingeniería de Computación Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos. Asignación