Programacion scheme
Tema 2: LISP (SCHEME)
2
Tema 2: LISP (SCHEME)
Introducción Representación de Datos Definición de Funciones Predicados Listas
Programación Declarativa – Tema 2: LISP (SCHEME)
3
Introducción (I)
SCHEME es un dialecto de LISP (LISt Processing). LISP es un lenguaje de programación funcional con una amplia base matemática (lambda-cálculo). La unidad decálculo principal son los símbolos, en notación prefija, ( 3 2). p j (+ )
Programación Declarativa – Tema 2: LISP (SCHEME)
4
Introducción (II)
Otro componente principal de LISP son las listas. Todo lo que esté encerrado entre paréntesis será considerado como una lista lista. En una lista, el primer elemento suele ser el nombre de la función que realiza, y el resto de elementos, losoperandos. p
P.e., (+ 3 2)
Programación Declarativa – Tema 2: LISP (SCHEME)
5
Introducción (III)
La evaluación de los operandos se hace de manera ‘perezosa', es decir, no se realiza perezosa , hasta que hace falta. Es un lenguaje fuertemente funcional ya que funcional, se compone exclusivamente de funciones anidadas en otras f id d t funciones. i
Programación Declarativa – Tema 2: LISP(SCHEME)
6
Introducción (IV)
No existe diferencia entre datos y código cuando hablamos dentro del ámbito de la sintaxis. Ejemplo:
Lista de tres elementos ⇒ (1 2 3) Lista que suma dos elementos ⇒ (+ 1 2) (pepe 1 2) ⇒ función (paco 1 2) ⇒ constante
Programación Declarativa – Tema 2: LISP (SCHEME)
7
Introducción (V)
El otro elemento son los átomos.
Símbolos: Cadena alfanumérica No puedenalfanumérica. aparecer paréntesis porque se usan para de delimitar listas, pe o puede apa ece cua qu e a s as, pero aparecer cualquier otro carácter. Ejemplo: mola, Hola. Números: 1, 2, 33, 7E3... También va a admitir números complejos complejos. P.e., 2 + 3i
Programación Declarativa – Tema 2: LISP (SCHEME)
8
Introducción (VI)
Básicamente, las estructuras del lenguaje son listas y átomos.LISP no es sensible a mayúsculas y minúsculas. minúsculas Para separar los elementos de una lista en LISP, tan sólo es necesario uno o varios espacios. p
Programación Declarativa – Tema 2: LISP (SCHEME)
9
Evaluación de expresiones (I)
LISP no ejecuta expresiones, tan sólo las evalúa. La evaluación consiste en:
Si evaluamos un número, el resultado será ese número. 3→3 La evaluación deun símbolo consistirá en saber su valor, y el resultado será dicho valor. Si un símbolo no tiene asignado un valor, l evaluación f ll i d l la l ió falla. símbolo → valor asignado
Programación Declarativa – Tema 2: LISP (SCHEME)
10
Evaluación de expresiones (II)
Evaluación de listas:
Al evaluar una lista se evalúa el primer elemento lista, (normalmente, el nombre de la función) y a cocontinuación los s gu e es e e e os, co o e uac ó os siguientes elementos, conforme van apareciendo (evaluación ‘perezosa’). Cuando se evalúan todos los elementos que componen la lista, se pasa a evaluar ésta en conjunto. j
lista → ( _ _ _ _ _ _ )
Programación Declarativa – Tema 2: LISP (SCHEME)
11
Evaluación de expresiones (III)
Ejemplo: (+ 3 2)
función suma Evaluamos el valor de lafunción
número 3
número 2
El valor devuelto dependerá de cómo se haya d fi id l f h definido la función ( este caso, l ió (en t la suma).
Programación Declarativa – Tema 2: LISP (SCHEME)
12
Polimorfismo (I)
Estamos acostumbrados a ver el operador '+' como el operador suma, p p pero en algunos g lenguajes puede usarse, p.e., como operador de concatenación.
“Hola” + “mundo” ⇒ “Holamundo” 3+2⇒5 “Hola” + 3 ⇒ “Hola 3”
Esto es lo que se conoce como polimorfismo. LISP admite esta característica.
Programación Declarativa – Tema 2: LISP (SCHEME)
13
Polimorfismo (II)
Ejemplo. Tenemos esta lista de tres elementos: (+ (+ 1 1) 1)
1º un símbolo 2º una lista 3º un número
LISP evalúa de este modo: (+ ( ( (+ 1 1) 1) ⇒ 3 +11 + 2 1 3
Programación Declarativa – Tema 2:...
Regístrate para leer el documento completo.