Ir arriba

.

.

Paradigma: Lo que se hace por amor
está más allá del bién y del mal.! (Nietzsche)

Paradigma Funcional
Lenguaje LISP
LISt Processor: Proceso de listas (John McCartdy)

Lenguaje de alto nivel para la inteligencia artificial (AI) que opera listas encadenadas tanto que su código fuente en sí mismo está compuesto de listas.
El programa opera el código fuente como estructura de datos, se escribe como expresión S(listas entre paréntesis), dando lugar a macro sistemas para crear lenguajes de dominio específico embebidos en Lisp.
La sintáxis de llamada de función es una lista, con:
- La función o el nombre del operador en primer lugar,
- Los argumentos a continuación:
Ejemplo:
La función f de tres argumentos será llamada: (f x y z).

DIALECTOS:
- Common Lisp(Guy Lewis Steele Jr. y Gerald Jay Sussman):
Descendiente de MacLisp, Interlisp, y Lisp Machine Lisp, es un superconjunto con estándar de lenguaje grande que incluye tipos de datos y formas sintácticas, como un sistema del objeto.
Este dialecto de Lisp con ámbito estático y cola recursiva fue diseñado para tener una semántica clara y simple y pocas maneras diferentes de formar expresiones.

- Scheme:
Con menos características estándar, pero con ciertas de implementación (como optimización de llamada de cola)
Common Lisp adopta algunas características de Scheme, como ámbito de léxico y clausura léxica.
Scheme sigue evolucionando con una serie de los estándares (Revisedn Report on the Algorithmic Language Scheme) y una serie de Scheme Requests for Implementation.

LISTAS:
Los datos y programas son listas que están delimitadas por paréntesis, donde algunas de las funciones predefinidas tienen símbolos:
- Suma: +
- Producto *
- Funciones predefinidas:


	CAR Devuelve la cabeza de la lista

 	CDR Devuelve la cola de la lista

	CONS Construye una lista CONS a partir de otras dos

	LIST Construye una lista a partir de varias sublistas
	
	Asignación, relaciones booleanas y predicados
	SET y SETQ Evalúan sus argumentos

	EQ Comprueba si dos argumentos son iguales

	GREATERP y LESSP Compara si el arg 1 es mayor/ menor que el 2

	NULL Comprueba si la lista es nula

	ATOM; LISTP NUMBERP Averiguan el tipo de un objeto

	OR, AND y NOT Predicados de suma, multiplicación y negación
	
	Aritméticas
	PLUS, DIFERENCE, TIMES, QUOTIENT, REMAINDER Suma, resta, multiplicación, cociente, resto
	
	Condicionales e iterativas
	COND Condicional con varios predicados

	LOOP Función iterativa no declarativa

        Formas funcionales para crear y combinar funciones
	DEFUN Función que permite crear otras funciones

        Objetos de datos
	LISP estructura fundamental
 
LISP operativamente no destruye parámetros, porque sus funciones devuelven una lista cuando efectua transformaciones sobre la lista que reciben, sin alterarla. Por ello es adecuado para la IA donde el código y los datos tienen el mismo tratamiento de listas.

Ejemplos:
Comprobar si un número es primo:


    (DEFUN PRIMO(N)
	COND((EQ N 2) T) ((EQ N 3) T)
	(T (PRIMO1 N (QUOTIENT N 2)))))
	(DEFUN PRIMO1 (N Y)
	COND((EQ (REMAINDER N Y) 0) NIL)
	((EQ Y 2) T)
	(T (PRIMO1 N (DIFERENCE Y 1))))
Al ejecutarlo, genera:

   (PRIMO 3) T 

   (PRIMO 8) NUL 

Ejemplo: ¡Hola, mundo!:


(format t "¡Hola, mundo!")
Ejemplo: Definición defunción:

  (defun vacia (l)
    (cond ((null l) 1)    ; si la lista esta vacía devuelve 1
          (t 0)))         ; en otro caso (lista llena) devuelve 0
Ejemplo: Llamada a la función:

  (vacia '(1 3 4))        ; La lista no esta vacía, devolvería 0
  (vacia '())             ; La lista esta vacía, devolvería 1

(defun último (lista)
  (cond ((null (cdr lista)) (car lista))
        (t (último (cdr lista)))))

(último '(1 2 3 4 5 6 7)) ; devuelve el último de la lista: 7
Ejemplo: FACTORIAL
Definición matemática
- Factorial(x) = 1 si x=0 caso base
- x*factorial(x-1) si x>0 caso recursivo
Función factorial con recursividad no final

(defun factorial (n)
   (if (= 0 n)
     1                            ; caso base
     (* n (factorial (- n 1)))))  ; caso recursivo

(factorial 4)  produce 24=4*3*2*1
Ejemplo: Función de Ackermann
Propuesta por Nikolai Coica

 (defun ackermann (m n) "The Ackermann Function"
   (cond ((= m 0) (+ n 1))
         ((= m 1) (+ n 2))
         ((= m 2) (+ 3 (* n 2)))
         ((= m 3) (+ 5 (* 8 (- (expt 2 n) 1))))
         (t (cond ((= n 0) (ackermann (- m 1) 1))
                  (t (ackermann (- m 1) (ackermann m (- n 1))))))))

Paradigma
Hay hombres que de su ciencia
tienen la cabeza llena
Hay sabios de todas mentas
Mas digo sin ser muy ducho
Que es mejor que aprender mucho
El aprender cosas buenas..!!
José Hernández

Paradigmas I M P R E S O S:
Lenguajes Gramáticas Autómatas Series
Laplace Ecuación Operador Compilador

Te espero en: wilocarpio@gmail.com

Esta page está en: www.wilocarpio.com

11/11/2018

Volver al principio