Beruflich Dokumente
Kultur Dokumente
División de Ingeniería en
Sistemas Computacionales
ANTOLOGÍA
Titular de la materia:
MCA. Gil Santana Esparza.
Una razón fundamental de este dominio reside en que los lenguajes imperativos son más
cercanos a la forma como realmente funciona la máquina. Existen otros paradigmas de
programación diferentes al imperativo como la programación funcional y la programación
lógica, cuyo estudio, desarrollo y uso han estado principalmente restringidos al ámbito
académico.
Hay una gran cantidad de Lenguajes de Programación (LP), algunos han evolucionado más
que otros, algunos siguen vigentes, mientras otros han sido operativos durante períodos más
cortos y actualmente están en desuso.
Dada esta gran variedad, es difícil mostrar una visión de todos, sin embargo, resulta
más claro verlos bajo una clasificación o paradigma.
Cabe mencionar que estos aspectos son importantes, pues como se mencionaba en clase,
puede que existieran Lenguajes de Programación que fueron establecidos en un cierto
paradigma y por su evolución pasaron a ser de uno nuevo, un tal ejemplo sería: C# que paso
a C++.
Paradigma Imperativo.
Abstracción.
Encapsulamiento.
Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma
entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los
componentes del sistema. Algunos autores confunden este concepto con el principio de
ocultación, principalmente porque se suelen emplear conjuntamente.
Polimorfismo.
Paradigma Estructurado.
La programación se divide en bloques (procedimientos y funciones) que pueden o no
comunicarse entre sí.
Se controla con secuencia, selección e iteración.
Permite reutilizar código programado y otorga una mejor compresión de la
programación.
Indica el ¿qué hacer?
Paradigma Declarativo.
• Describe (declara) cómo es algo (las propiedades dela solución buscada), dejando
indeterminado el algoritmo (conjunto de instrucciones) usado para encontrar esa
solución.
Paradigma Funcional.
La función constituye el elemento principal a partir del cual se construye una solución que
luego se revierte en un programa y que cuenta con características como paso de
argumentos, nominación única, recursión, omisión de declaraciones y retornos automáticos
(Schildt, 2000).
Programación Lógica.
“Es un paradigma de programación que se basa en la lógica de primer orden. Esta lógica
nos la han enseñado en la escuela en nuestras clases de español, que, mediante reglas,
puedes derivar conclusiones, por ejemplo:
Figura 1.2 “Ejemplo del entorno Prolog”.
Estilos de programación.
“Esto más que nada, va en conjunto con los paradigmas de programación, pues como se
dice un estilo, es un modelo a seguir, cada uno, cada programador adopta el estilo a seguir
en base a su problemática pensando en como resolverlo.”
Evaluación de expresiones.
Tipos de datos.
Se comprende que los tipos de datos en un sentido amplio, un tipo de datos define un
conjunto de valores y las operaciones sobre estos valores. Casi todos los lenguajes de
programación explícitamente incluyen la notación del tipo de datos, aunque lenguajes
diferentes pueden usar terminología diferente.
Para retomar como punto final en esta investigación, comprendí una nueva forma de ver la
programación, establecida por paradigmas y clasificación de ellos, de cómo utilizábamos uno
de los dos sin saberlo, claramente el paradigma imperativo además constatar que el
paradigma declarativo es muy poderoso si sabemos utilizarlo en nuestro conocimiento como
sismólogos ya que en la carrera nuestro enfoque fue hacia el paradigma estructurado y
orientado a objetos,
División de Ingeniería en
Sistemas Computacionales
Reporte de investigación.
“Características de la programación funcional.”
Titular de la materia:
MCA. Gil Santana Esparza.
Al mismo tiempo que Church, otro matemático, Alan Turing, desarrolló una máquina
abstracta para intentar resolver el mismo tiempo de problemas planteados por Church. Como
consecuente, en este documento se pretende mostrar las ideas subyacentes a la
programación explicada, así como ilustrar las características que la hacen un enfoque
particular y novedoso de este paradigma de programación.
DESARROLLO.
Historia.
Su principal origen proviene del Cálculo Lambda (o λ-cαlculo), una teoría matemática
elaborada por Alonso Church como apoyo a sus estudios sobre Computabilidad. Un lenguaje
funcional es, a grandes rasgos, un azúcar sintáctico del Cálculo Lambda. Los orígenes
teóricos del modelo funcional se remontan a la década del 30, más precisamente al año
1934, cuando Alonso Church introdujo un modelo matemático de computación llamado
lambda calculo.
A pesar de que en esta época las computadoras aun no existían, esté cálculo se
puede considerar como el primer lenguaje funcional de la historia y sus fundamentos fueron
la base de toda la teoría de la programación funcional y de los lenguajes funcionales
desarrollados posteriormente. Se puede decir que los lenguajes funcionales modernos son
versiones de lambda cálculo con numerosas ayudas sintácticas.
Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los
híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son
menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes
procedimentales, como las secuencias de instrucciones o la asignación de variables.
Características de la programación funcional.
Programación declarativa
Definición y evaluación de funciones
Uso de la recursión
Funciones como datos primitivos
En esta expresión estamos definiendo una función con un argumento formal (x) que tiene
como cuerpo la expresión (* x x) y le estamos dando el nombre de cuadrado. Después
evaluamos una expresión en la que llamamos a la función recién definida y a la función
primitiva '+'.
(defun (argumento x)
( * x y))
Expresiones y valores.
La noción de expresiones es central en la programación funcional. Existen muchos tipos de
expresiones matemáticas, quizás no todas permiten la misma notación, pero sí todas tienen
ciertas características comunes. La característica más importante de la notación matemática
es que una expresión se usa para denotar (o describir) un valor. “En otras palabras, el
significado de una expresión es su valor y no llegan a existir otros efectos ocultos.”
El valor de una expresión depende únicamente de los valores de las expresiones que
la constituyen (si es que existen) y estas sub-expresiones pueden reemplazarse libremente
por otras que posean el mismo valor.
El Lenguaje Lisp.
El Lisp es el lenguaje más importante del paradigma funcional. De él nacen una enorme
variedad de dialectos, de los que Scheme es uno de los más extendidos en ámbitos
académicos en la actualidad.
El origen del Lisp se remonta al año 1956, en el que John McCarthy estaba buscando
una solución para programar el computador IBM 704, en los primeros proyectos de
inteligencia artificial. A finales de 1958 McCarthy, ya profesor de Ingeniería Electrónica y
Marvin Minsky, profesor de matemáticas, ambos en el MIT, comenzaron el MIT Artificial
Intelligence Project e iniciaron la implementación del Lisp.
Uno de los factores que contribuyeron más al éxito del Lisp es su carácter pragmático.
No se trata de un lenguaje puramente funcional ni declarativo, sino que es posible realizar
sentencias imperativas en las que se modifican el valor de posiciones de memoria a las que
hacen referencia a variables.
CONCLUSIÓN.
Para retomar como punto final en esta investigación, comprendí una nueva forma de ver la
programación, establecida por el paradigma funcional y sus características.
La programación funcional nos permitirá desarrollar software mucho más legible y fácil
de testear, nos concentramos en qué estamos haciendo y no en cómo se está haciendo.
Incluso habrá ocasiones que solo con este paradigma pudiéramos resolver
problemáticas a soluciones complejas de la vida cotidiana entabladas al paradigma funcional
junto con sus métodos de programación. Y al igual que a lo largo de la materia, nos
enfocaremos más a esté, sin lugar a dudas será un aprendizaje importante en nuestra
formación en la carrera y un arma poderosa en la Ingeniería de software pues los programas
con este paradigma carecen de efectos colaterales.
REFERENCIAS BIBLIOGRAFICAS.
División de Ingeniería en
Sistemas Computacionales
Reporte de investigación.
“Reconocer la estructura y elementos de
programación en el lenguaje LISP”
Titular de la materia:
MCA. Gil Santana Esparza.
La programación funcional se caracteriza por los programas que regresan valores más
que modificar cosas. Lisp es un lenguaje con una sola sintaxis para expresar los programas.
Esta sintaxis se basa en listas. Lisp es un lenguaje matemático basado en la teoria de las
funciones recursivas y en el cálculo Lambda.
Hay una gran cantidad de programas escritos en Lisp para emular comportamiento
inteligente o bien sistemas expertos:
Lisp maneja los enteros. También las cadenas de caracteres delimitados por comillas. Los
enteros y las cadenas se evalúan a ellos mismos.
Los símbolos y las listas son los tipos de datos propios de Lisp. Los simbolos son
palabras. Los simbolos no se evalúan a si mismos. Si se requiere se debe usar Quote
(apóstrofe).
Las listas se representan como cero o más elementos entre paréntesis. Los elementos
pueden ser de cualquier tipo, incluso una lista. Si no se utiliza quote con las listas se tomarán
como llamada a una función.
'(ejemplo de lista)
Para lisp puede empezar escribir una lista, mientras uno no cierre el parentesis, seguira
esperando para realizar la lista. El error más frecuente al momento de programar son los
parentesis.
2.2 Funciones.
Para definir nuestras propias funciones se utiliza defun que trabaja con tres argumentos:
El nombre de la función, la lista de parámetros y el cuerpo de la función que puede ser una o
más expresiones.
Ejemplo:
(car variableparametro)
Los simbolos y en las listas deben acompañarse con quote para ser trabajados. De lo
contrario Lisp lo intenta procesar como código.
Ejemplo:
(defun multiplica (x y)
(* x y))
Ejemplo para llamar la función:
(multiplica 3 4)
2.4 Operadores.
Por ejemplo, si queremos sumar tres numeros en notación infija, necesitaremos usar
dos veces el operador +:
2+3+4
(+)
(+ 6)
(+ 6 1)
(+ 6 7 8)
Las expresiones pueden anidarse, esto es, el arguemnto de una expresión puede ser otra
expresión compleja:
(<(/ 6 3) 3)
Regla de evaluación de las expresiónes.
En Lisp, * es una función y (* 2 3) es una llamada a la función. Cuando Lisp evalúa una
llamada a alguna función, lo hace en dos pasos:
2. Los valores de los argumentos son pasados a la función nombrada por el operador.
Si alguno de los argumentos es a su vez una llamada de la función, será evaluado con las
mismas reglas.
Ejemplo:
2. El siguiente argumento (/ 6 2)
Existen operadores en Lisp que no son funciones. Los operadores que no siguen las reglas
de evaluación se conocen como operadores especiales. Una de estos operadores especiales
es quote('). Quote no evalúa nada sólo despliega lo que el usuario introduce. Realmente se
utiliza para aquellos casos en los que se desea evitar que una expresión sea evaluada.
Ejemplo:
(quote(/ X Y))
La función cons se utiliza para construir listas. Si su segundo argumento es una lista, se
regresa una nueva lista con el primer argumento agregado en el frente.
Ejemplo:
(cons'a'(b c d))
Otra función para trabajar listas es car. El car de una lista es el elemento más a la izquierda.
Ejemplo:
Ejemplo:
Para analizar si un argumento es una lista se utiliza la función listp, que regresa el valor
verdadero (t) o el valor de falso (nil).
Condicionales.
Ejemplo:
(if(listp'(x y z)
(* 6 3)
(/ 6 3)
(if(listp'(x y z)
(* 6 3)
(/ 6 3)
Variables.
En Lisp las variables no tienen tipo son los valores los que tienen un tipo. No es necesario
declarar el tipo de una variable porque cualquier variable puede recibir cualquier objetivo de
cualquier tipo.
Ejemplo:
(* x y))
Para crear variables globales se utiliza defparameter. Por convención, se definen las
variables globales con asterisco al inicio y fin del nombre definido.
Ejemplo:
Recursividad.
Una función puede llamar a cuawlquier función. Y si una función se llama a sí misma se
llama recursividad.
Ejemplo:
(defun numero()
(let((num (read)))
num
(numero))))
Iteración.
Para incluir ciclos se puede utilizar la iteración con do. El operador do puede crear variables y
su primer argumento es una lista de especificación de variables. El formato de esta lista es
(variable valor-inicial actualización).
Ejemplo:
(do (
(i numinicial (+ i 1))
CONCLUSIÓN.
Para retomar como punto final en este reporte, vimos prácticamente el lenguaje LISP, como
se utiliza, su complejidad y funciones a utilizar, realmente fue algo complejo, por el simple
hecho de ser algo nuevo y novedoso, pero que con algo de practica y como buen
programador tener, una buena lógica matemática, para entender la realidad de todo esto.
MAPA CONCEPTUAL
PROGRAMACIÓN
FUNCIONAL.
MANUAL DE PRACTICAS
INSTITUTO TECNOLÓGICO SUPERIOR DE PÁNUCO
INGENIERÍA EN SISTEMAS COMPUTACIONALES
de LISP
MATERIA:
ELABORÓ:
Los programas para computadora actualmente son fundamentales en muchas áreas del ser humano,
debido a que se usan para resolver diversos problemas en la ciencia, la industria y los negocios. Para
cubrir estas necesidades, se han desarrollado lenguajes de programación dentro de la inteligencia
artificial. El Ingeniero en Sistemas Computacionales contribuirá, aplicando estos conocimientos para
la solución de problemas a través de la programación lógica y funcional, con una conciencia ética y
de respeto al medio ambiente.
OBJETIVO GENERAL.
Competencias instrumentales:
• Solución de problemas.
• Toma de decisiones.
Competencias sistémicas:
• Capacidad de aprender.
Competencias interpersonales:
• Habilidades interpersonales.
NOMBRE DE LA PRÁCTICA: Funciones básicas.
No. DE PRÁCTICA: 1
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la función QUOTE y sus variantes analizando su
funcionalidad y determinando cuál es el número de argumentos que recibe, qué tipo de argumentos
recibe y, cuál es el valor de retorno.
DESARROLLO:
Operador Argumento.
(quote ( A B C ) )
(A B)
(A B C)
(A B C D)
(A B C D E)
(A B C D E F G)
(A B C D E F G 56)
(A B C D E F G 56 89)
(A B C D E F G 56 89 100000)
[16]> (quote (+ 4 5 Jaime Javier Melo Hernandez 1.5 true false * # $%))
En el paso 16 vemos como el carácter “#” no es admito, puesto que CLIPS lo detecta
como un carácter especial.
Referente a la practica 1, al realizarla comprendí que “QUOTE (‘)” no es una función en sí, sino
más bien es un operador especial que no evalúa nada, simplemente regresa o despliega los
datos introducidos por el usuario.
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique las funciones CAR y CDR analizando su funcionalidad y
utilidad, tomando como base los siguientes ejercicios:
CAR (A B C)
CAR ‘(x y z)
CDR ‘(x y z)
Determine cuál es el número de argumentos que recibe, qué tipo de argumentos recibe y, cuál es el
valor de retorno.
Describa el desarrollo de la práctica y anote los resultados y/o conclusiones.
DESARROLLO:
CAR (A B C)
o La primera marca que no esta definida, puesto a que CAR es una propiedad del
CLIPS, al momento de evaluar manda el siguiente error “EVAL: la función A no está
definida”
CAR (QUOTE (A B C))
o Evalua la expresion obtenida de quote, dando como resultado siempre el primer valor
de esta.
CAR ‘(x y z)
o Aplica lo mismo que la función CAR, solo que esta devuelve como resultado, todos los
valores pasados el primero.
(car (cdr (cdr ‘(a b c d))))
RESULTADOS/CONCLUSIONES:
Podemos aplicar diferentes funciones en Lisp que nos llevaran a un mismo resultado, pero
su forma de ejecutarlo será diferente.
INSTRUCCIONES:
EQ (COMPUTADORA COMPUTADORA)
EQ (PC pc)
EQ (QUOTE PC ‘PC)
EQ (RED REDES)
Determine cuál es el número de argumentos que recibe, qué tipo de argumentos recibe y, cuál es el
valor de retorno.
EQ (COMPUTADORA COMPUTADORA)
o
EQ (PC pc)
EQ (QUOTE PC ‘PC)
EQ (RED REDES)
RESULTADOS/CONCLUSIONES:
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la función DEFUN analizando su funcionalidad, tomando
como base los siguientes ejercicios:
- Defina una función que reciba como parámetro una lista variable y regrese el primer elemento
de la lista.
- Defina una función que reciba dos elementos como parámetros y regrese la multiplicación de
los mismos.
Determine cuál es el número de argumentos que recibe, qué tipo de argumentos recibe y, cuál es el
valor de retorno.
DESARROLLO:
Defina una función que reciba como parámetro una lista variable y regrese el primer elemento
de la lista
Se creo una función la cual, regreso un parámetro mostrando el primer elemento en la lista.
Defina una función que reciba dos elementos como parámetros y regrese la multiplicación de
los mismos.
Se definió una función multiplica la cual recibe dos parámetros como valores, al mandar a llamar a
esta función, realiza la ejecución de una multiplicación.
RESULTADOS/CONCLUSIONES:
Se analizo la creación de una función a utilizar, es indispensable recalcar que como estas
funciones trabajan en memoria, al cerrar el programa se borran. Por lo que es mejor, guardar
la sintaxis en un editor de texto con la extensión “.lisp” y después compilarla con clisp, si el
código esta bien, este se compila y deja dos archivos extra.
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la notación prefija para realizar las operaciones con los
siguientes números:
SUMAS:
2, 3 y 4.
6y1
6, 7 y 8
EXPRESIONES:
SUMA 7 y 2
RESTA 3 y 2
MULTIPLICA LOS RESULTADOS ANTERIORES
DESARROLLO:
2, 3 y 4.
6
6y1
6, 7 y 8
RESULTADOS/CONCLUSIONES:
Utilizando el SHELL de GNU CLISP evalúa las siguientes expresiones y analiza el comportamiento de
cada argumento:
(* (- 5 2) (/ 6 2))
(quote (/ 18 3))
‘ (/ 18 3)
DESARROLLO:
(* (- 5 2) (/ 6 2))
(quote (/ 18 3))
‘ (/ 18 3)
RESULTADOS/CONCLUSIONES:
Con las practicas realizadas anteriormente comprendemos que Lisp evalúa el primer
argumento de izquierda a derecha (- 5 2). 5 es evaluado como 5 y 2 es evaluado como 2. Estos
valores son pasados a la función - que regresa el valor 3.
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP evalúa las siguientes expresiones y analiza el comportamiento de
cada argumento:
(and t (/ 6 3))
(and t t (* 6 3))
(and t t (* 6 3) t)
(and t t (* 6 3) nil)
(or nil (* 5 3) nil)
DESARROLLO:
(and t (/ 6 3))
(and t t (* 6 3))
(and t t (* 6 3) t)
(and t t (* 6 3) nil)
RESULTADOS/CONCLUSIONES:
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la función CONS analizando su funcionalidad, tomando
como base los siguientes ejercicios:
cons ’a ’ (b c d)
Determine cuál es el número de argumentos que recibe, qué tipo de argumentos recibe y, cuál es el
valor de retorno.
DESARROLLO:
cons ’a ’ (b c d)
RESULTADOS/CONCLUSIONES:
En clase el Docente nos explicaba que Lisp maneja funciones como en este caso la practica
con la función cons, la cual es utilizada para construir listas. Si su segundo argumento es una
lista, se regresa una nueva lista con el primer argumento agregado en el frente.
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la condicional IF analizando la lógica para los casos
verdaderos y el comportamiento para el caso falso, tomando como base los siguientes ejercicios:
(/ 6 3))
(+ 6 3)
(- 6 3))
Determine cuál es el número de argumentos que recibe, qué tipo de argumentos recibe y, cuál es el
valor de retorno.
DESARROLLO:
(* 6 3)
(/ 6 3))
Si este es una lista hace una operación true. Si no detecta que es una lista ejecuta un false.
(+ 6 3)
(- 6 3))
Verifica si el valor en el if es una lista, al no serla este se convierte en un else, realizando la segunda
operación.
RESULTADOS/CONCLUSIONES:
INSTRUCCIONES:
DESARROLLO:
RESULTADOS/CONCLUSIONES:
INSTRUCCIONES:
Utilizando el SHELL de GNU CLISP aplique la iteración con la instrucción DO para resolver el
siguiente ejercicio:
- Escriba un programa LISP que defina la función para calcular el cuadrado de un rango de
números. La función debe recibir dos argumentos: valor inicial y valor final, y debe calcular el
cuadrado de los números comprendidos en ese rango.
DESARROLLO:
RESULTADOS/CONCLUSIONES:
División de Ingeniería en
Sistemas Computacionales
Reporte de investigación.
“Sintaxis y semántica de la lógica de primer orden y
cláusulas de Horn”
Titular de la materia:
MCA. Gil Santana Esparza.
También se conoce a estos lenguajes como lenguajes declarativos, porque todo lo que
el programador tiene que hacer para solucionar un problema es describirlo vía axiomas y
reglas de deducción. Dando referencia a todo esto, como introducción al tema de
investigación.
DESARROLLO.
Programación lógica.
Se sabe como tal, que la mayoría de los lenguajes de programación se basan en la teoría lógica de
primer orden, aunque también incorporan algunos comportamientos de orden superior, en este sentido,
destacan los lenguajes funcionales ya que se basan en el Cálculo Lambda, es la única teoría lógica de
orden superior.
Como respuesta a la pregunta, La programación lógica, junto con la funcional, forma parte de
lo que se conoce como Programación Declarativa, es decir la programación consiste en
indicar como resolver un problema mediante sentencias, en la Programación Lógica, se
trabaja en una forma descriptiva, estableciendo relaciones entre entidades, indicando no como,
sino que hacer.
Para definir la idea, se dice que la idea esencial de la programación lógica es:
Suponer lo opuesto y usar modus ponens y la regla de eliminación del cuanticador universal,
para encontrar un contra ejemplo al supuesto.
El argumento modus ponendo ponens puede ser visto como un silogismo de dos patas, que
en vez de usar un tercer término que le sirva de enlace, más bien utiliza una sentencia
condicional con la cual relaciona al elemento antecedente con el elemento consecuente.
Modus ponendo tollens es una regla de inferencia válida de la lógica proposicional, a veces
abreviado MPT. El modus ponendo tollens establece que, si no es posible que dos términos
sean simultáneamente verdaderos; y uno de ellos es verdadero; entonces se puede inferir
que el otro término no puede ser verdadero.
donde cada vez que aparezcan las instancias de " ¬(𝑃⋀𝑄) " y " 𝑃 " en las líneas de una
demostración, se puede colocar " ¬𝑄 " en una línea posterior. En resumen, "si P y Q no
pueden ser verdad simultáneamente, y P es verdad, entonces Q no puede ser verdad."
Resolución SLD.
Una cláusula de Horn es una secuencia de literales que contiene a lo sumo un literal positivo.
Al escribirla en notación de Kowalski tendrá una de estas cuatro formas:
Los hechos y las reglas se denominan cláusulas definidas: los hechos representan “hechos
acerca de los objetos” (de nuestro universo de discurso), relaciones elementales entre estos
objetos las reglas expresan relaciones condicionales entre los objetos, dependencias.
Es un caso particular de la resolución general, donde: Los resolventes son siempre objetivos
(cláusulas sin cabeza). Los programas son conjuntos de cláusulas (de Horn) definidas, i.e.,
hechos y reglas. Hay una función de selección que selecciona un átomo del resolvente a
quien aplicar resolución.
Como punto final, doy como entendido en los lenguajes lógicos se utiliza el formalismo de la
lógica de primer orden para representar el conocimiento sobre un problema y para hacer
preguntas que, si se demuestra que se pueden deducir a partir del conocimiento dado en
forma de axiomas y de las reglas de deducción estipuladas, se vuelven teoremas.
Modus ponendo ponens. 2013. Lógica. España: Webnode. Recuperado de: leyes-de-
inferencia5.webnode.es.
División de Ingeniería en
Sistemas Computacionales
MANUAL DE PRACTICAS.
“Ejercicios de lógica de primer orden”
Titular de la materia:
MCA. Gil Santana Esparza.
Como función:
Alumno (Marisol)
A (m)
C (c)
B (m, e)
La lógica de predicados permite representar objetos y propiedades a diferencia de la lógica
proposicional que sólo considera hechos.
Personas
Objetos físicos
Conceptos
Ejercicio: Para las siguientes oraciones indica donde existe una relación y donde una
propiedad. Después expresarlas como funciones.
Relaciones:
Propiedades:
Rojo, redondo…
Funciones:
¬ (Negación) ¬P
^ (Conjunción) P^Q
V (Disyunción) PvQ
→ (Condicional P → Q ( ¬P v Q)
Ɐ (Cuantificador universal) (para cada x, para cada todo x, cada x, todo x, cualquier x, todos)
N(c)
Nc
A(m)
Am
Ma
Juan es un musico
Sj
El salón está desordenado
Ds
La mesa es cuadrada
Cm
Sij
Alta (Adriana)
Definición de términos.
Si las premisas son verdaderas, entonces las conclusiones que se derivan de ellas
lógicamente, han de ser verdaderas.
P -> Q ; P
Demostraciones.
Modus Ponendo Ponens. Regla de inferencia (método) que permite demostrar Q a permitir
de P -> Q
Premisa 2.
1. R -> S P
2. R S
3. S PP 12
1. ¬A ->¬B 4. M 1. R
1. ¬B 6. N 3. ¬TvQ
1. A -> B P
2. B -> C P
3. A P
4. B PP 1,3
5. C PP 2,4
1. S ->¬T P
2. S P
3. ¬T->R P
4.¬T PP 1,2
5. R PP 3,4
R = refrescará
N = se formarán nubes.
1. A->R
Premisas y conclusiones.
1. Todos los perros son animales. Lassie es un perro. Por tanto, Lassie es un animal.
P = perros
A = animales
L = Lassie
1. Pl -> Ax P
2. Pl P
3. Al PP 1,2
2. Todos los loros son pájaros. Todos los pájaros son vertebrados. Polly es un loro. Por
tanto, Polly es un vertebrado.
L = loros
J = pájaros
V = vertebrados
P = Polly
1. Lp -> Pp
2. Pp -> Vp
3. Lp
4. Pp PP 1,3
5. Vp PP 2,4
La demostración y sus métodos.
Modus Tollendo Tollens. Regla de inferencia que se aplica también a las reglas
proposicionales. Pero en este caso, negando (tollendo) el consecuente, se puede negar
(tollens) el antecedente de la condicional.
3. ¬P T T 1,2
Permite pasar de dos premisas: (a) es una premisa condicional y (b) una preposición que
niega el consecuente.
P = presidente
J = Jefe de Estado
M = monarca
B = Balduino
División de Ingeniería en
Sistemas Computacionales
Reporte de investigación.
“Estructura del lenguaje Prolog.”
Titular de la materia:
MCA. Gil Santana Esparza.
Pánuco, Ver. 19 de diciembre de 2019
INTRODUCCIÓN.
El presente documento muestra conceptos subyacentes al concepto de
programación lógica, así como características que los hacen un enfoque particular
y novedoso de la programación lógica que lo convierten en una clara opción frente
al enfoque en el cual surgió esta necesidad. Principalmente los lenguajes más
usados en IA: Lisp y Prolog.
Historia.
?−
¿ − 5 𝑖𝑠 2 + 3.
𝑇𝑟𝑢𝑒
¿ − 1 𝑖𝑠 1 + 1.
𝐹𝑎𝑙𝑠𝑒
El sistema Prolog nos advierte de que hay un error sintáctico (syntax error),
mostrando la pregunta recién formulada y el punto en que se encuentra el error (**
here **).
Bases de Prolog.
PWD/0.
?- pwd.
c:/prolog/javier
es decir, el directorio actual en notación Prolog.
LS/0.
?- ls.
patos.pl familia.pl
CONCLUSIÓN.