Você está na página 1de 45

Universidad de Pamplona

Facultad de Ingenieras y Arquitectura


Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
1
Paradigmas de Programacin

Indice de contenido de esta guia
1 PRESENTACION ..................................................................................................................................................................... 2
1.1 JUSTIFICACIN..................................................................................................................................................................... 2
1.2 OBJETIVO GENERAL ............................................................................................................................................................ 2
1.3 OBJETIVOS ESPECFICOS...................................................................................................................................................... 2
1.4 CONTENIDOS PROGRAMTICOS........................................................................................................................................... 2
1.5 BIBLIOGRAFA..................................................................................................................................................................... 3
1.6 REFERENCIAS WEB.............................................................................................................................................................. 3
1.6.1 Paradigmas de programacin........................................................................................................................................ 3
1.6.2 Programacin lgica...................................................................................................................................................... 3
1.6.3 Programacin funcional................................................................................................................................................. 3
2 PARADIGMA DE PROGRAMACIN LGICA................................................................................................................. 4
2.1 LGICA PROPOSICIONAL ..................................................................................................................................................... 4
2.2 REGLAS DE EQUIVALENCIA.................................................................................................................................................. 7
2.3 RAZONAMIENTOS CON LGICA PROPOSICIONAL................................................................................................................ 11
2.4 LGICA DE PREDICADOS. ................................................................................................................................................... 18
2.5 REPRESENTACIN DE CONOCIMIENTO (RC) CON LGICA DE PREDICADOS ........................................................................ 19
2.6 MISCELNEA SOBRE LGICA............................................................................................................................................. 21
2.7 PROGRAMACIN LGICA................................................................................................................................................... 22
2.8 PROLOG............................................................................................................................................................................. 22
2.8.1 Introduccin ................................................................................................................................................................. 22
2.8.2 Historia de prolog ........................................................................................................................................................ 22
2.8.3 Base de datos en prolog ............................................................................................................................................... 23
2.8.4 Listas ............................................................................................................................................................................ 23
2.9 EJERCICIOS CON PROLOG................................................................................................................................................... 24
2.9.1 Ejercicios de Prolog para procesamiento numrico.................................................................................................... 25
2.9.2 Ejercicios de Listas en Prolog...................................................................................................................................... 26
2.10 EJERCICIOS CON REGISTROS .............................................................................................................................................. 30
2.11 EJERCICIOS DE BASES DE DATOS CON PROLOG................................................................................................................... 31
2.12 ALGUNOS PREDICADOS PREDEFINIDOS EN PROLOG............................................................................................................ 34
3 PARADIGMA DE PROGRAMACIN FUNCIONAL....................................................................................................... 36
3.1 EJERCICIOS DE PROGRAMACIN CON HASKELL ................................................................................................................. 36
3.2 EJERCICIOS DE LISTAS EN HASKELL................................................................................................................................... 37
3.3 FUNCIONES PREDEFINIDAS................................................................................................................................................. 45

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
2

1 Presentacion
1.1 Justificacin
La programacin de computadores, tpicamente se ha enseado partiendo de paradigmas imperativos desde los
semestres iniciales del programa de ingeniera de sistemas. Sin embargo se requiere del conocimiento de paradigmas
declarativos que en determinado momento pueden llegar a ser tiles en el planteamiento de soluciones computacionales
a problemas donde el paradigma imperativo suele ser poco eficiente.
1.2 Objetivo General
Solucionar problemas bsicos de programacin, mediante el uso de los paradigmas lgico y funcional, haciendo uso de
los fundamentos matemticos que definen dichos paradigmas
1.3 Objetivos Especficos
Adquirir los fundamentos conceptuales de los diferentes paradigmas de programacin imperativa, lgica y funcional.
Adquirir habilidad en la solucin de problemas aplicando el paradigma de programacin ms adecuado al problema, al
contexto y al esfuerzo de programacin.
Desarrollar habilidades en el uso de por lo menos una herramienta de programacin en cada una de los paradigmas
estudiados.
Desarrollar aptitudes de anlisis, diseo y codificacin de soluciones a problemas bsicos de programacin en cada uno
de los paradigmas estudiados.

1.4 Contenidos Programticos
UNIDAD 1 Generalidades
1. Introduccin a los conceptos de lenguajes de programacin
2. Clasificacin de los lenguajes de programacin

UNIDAD 2 Paradigma de programacin lgica
1. Introduccin a la programacin lgica
2. Lgica proposicional
3. Reglas de equivalencia y de inferencia
4. Lgica de predicados
5. Herramienta de programacin lgica (Prolog)

UNIDAD 3 Paradigma de Programacin Funcional
1. Introduccin a la programacin funcional
2. Fundamentacin matemtica sobre funciones
3. Herramienta de programacin funcional mediante el lenguaje Haskell (Hugs)

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
3
1.5 Bibliografa
Kenneth C. Louden, Lenguajes de Programacin, Principios y Prcticas, Segunda edicin. Editorial Thomson.
Felix Garcia Merayo, Matemticas discretas, segunda edicin, editorial Thomson.
Winfried Kart Grassmann, jean- Paul Tremblay; Matemtica Discreta y Lgica, una perspectiva desde la ciencia de la
computacin., Editorial Prentice Hall.
Bird, R. Introduccin a la Programacin Funcional, Prentice Hall, 2000
P. Julin, M. Alpuente. Programacin Lgica, Teora y Prctica. Pearson, 2007.
Pratt, T.W.; Zelkowitz, M.V. Lenguajes de programacin: diseo e implementacin, Prentice-Hall, 1998
B. C. Ruiz, F. Gutierrez, P. Guerrero, J. Gallardo, Razonando con Haskell, Thomson, 200
R. BIRD & P. WADLER. Introduction to Functional Programming. Prentice Hall, 1988.
D. WATT. Programming Languages Concepts and Paradigms. Prentice Hall, 1990
Pascual Julian, lgica simblica para informticos, ISBN 970-15-1072-0, Coedicin: Alfaomega-Rama
Terrense W. Pratt; Programming Languages: Designs and Implementation; Second edition; Prentice Hall
Martha Vitalia Corredor Montaguth; Principios de Inteligencia Artificial y Sistemas expertos, Ediciones UIS.
Rodrigo Cardoso; Verificacin y desarrollo de programas, Ediciones Uniandes

1.6 Referencias Web
1.6.1 Paradigmas de programacin
http://www.frt.utn.edu.ar/sistemas/paradigmas/index.html
http://ocw.ua.es/ensenanzas-tecnicas/lenguajes-y-paradigmas-de-programacion/materiales/
1.6.2 Programacin lgica
http://www.cs.kuleuven.ac.be/~dtai/projects/ALP/
http://www.peiper.com.ar/edicion09/parad_logico.pdf
http://www.programacion.com/tutorial/prolog1/
http://www.programacion.com/tutorial/prolog2
http://www.coli.uni-saarland.de/~kris/learn-prolog-now/
http://pagesperso-orange.fr/COLIN.BARKER/tpro1/tpro.htm
1.6.3 Programacin funcional
http://www.uv.mx/aguerra/teaching/fp-06/index.html
http://www.haskell.org/
http://www.haskell.org/tutorial/
http://people.cs.uu.nl/jeroen/courses/fp-sp.pdf
http://polaris.lcc.uma.es/~blas/pfHaskell/gentle/index.html
http://www.info-ab.uclm.es/asignaturas/42525/BuzPF/menubuzon.html



Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
4
2 Paradigma de Programacin Lgica
1-Realice un breve estudio para sintetizar cada uno de los siguientes conceptos y temas
Paradigma (independiente del contexto de la informtica)
Programacin de computadores
Paradigma de Programacin
Lenguaje de Programacin
Diferentes clasificaciones de paradigmas de programacin
Paradigmas Imperativo y declarativo (conceptos y principales diferencias)
Paradigma de programacin orientado a objetos
Paradigmas de programacin lgica
Paradigmas de programacin funcional
2.1 Lgica Proposicional
2- Defina
Lgica
Lgica proposicional
Proposicin
Constante proposicional (valor de verdad)
Variable proposicional
Operaciones lgicas (resuma las tablas de verdad para cada operacin)
Expresiones lgicas
Tablas de verdad
Formas normales de una expresin proposicional

3-Relacione cada uno de los conceptos de la derecha con las expresiones de la izquierda
( ) Reglas que definen las expresiones que pueden escribir en
un lenguaje
a. Lxico
( ) Conjunto de conceptos, teoras, herramientas que soportan
un lenguaje de programacin
b. Proposicin
( ) Expresin de la cual se puede afirmar que es verdadera o
falsa
c. Paradigma lgico
( ) Conjunto de palabras vlidas dentro de un lenguaje de
programacin
d. Predicado
( ) Expresin lgica que representa una relacin entre objetos
o una caracterstica de un objeto
e. Sintaxis
( ) f. Reglas de inferencia
( ) Significado asociado a una expresin en un lenguaje g. Variable proposicional
( ) Formado por un lxico, una gramtica y una semntica h. Reglas de equivalencia
( ) Cuando se utiliza un lenguaje para especificar la solucin
a un problema en forma de pasos lgicos, secuenciales y
i. Ortografa

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
5
finitos... se dice que el lenguaje pertenece a un
( ) Mecanismo mediante el cual de un conjunto de
afirmaciones vlidas se puede deducir nuevo
conocimiento vlido.
k. Palabras claves
m. Paradigma funcional
n. Semntica
p. Paradigma de programacin
q. Paradigma imperativo
r. Lenguaje de programacin

4-Relacione cada uno de los conceptos de la derecha con las expresiones de la izquierda
( ) Mecanismo mediante el cual de un conjunto de afirmaciones
vlidas se puede deducir nuevo conocimiento vlido.
a. Lxico
( ) Expresin de la cual se puede afirmar que es verdadera o
falsa
b. Proposicin
( ) Conjunto de palabras vlidas dentro de un lenguaje de
programacin
c. Paradigma lgico
( ) Smbolo que representa una proposicin o una expresin
lgica
d. Predicado
( ) Expresin lgica que representa una relacin entre objetos o
una caracterstica de un objeto
e. Sintaxis
( ) Reglas que definen las expresiones que pueden escribir en
un lenguaje
f. Reglas de inferencia
( ) Significado asociado a una expresin en un lenguaje g. Variable proposicional
( ) Formado por un lxico, una gramtica y una semntica h. Reglas de equivalencia
( ) Cuando se utiliza un lenguaje para especificar la solucin a
un problema en forma de pasos lgicos, secuenciales y
finitos... se dice que el lenguaje pertenece a un
i. Ortografa
( ) Conjunto de conceptos, teoras, herramientas que soportan
un lenguaje de programacin
k. Palabras claves
m. Paradigma funcional
n. Semntica
p. Paradigma de programacin
q. Paradigma imperativo
r. Lenguaje de programacin


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
6
5-Realizar un resumen de las operaciones lgicas en la siguiente tabla
p q p q ~ p p q p q pq




6-Verificar si es tautologa o no
( p ( p q ) ) q
( p ( q p) ) q
((p q) (q r)) (p r)
( (p p) q ) ~q
(p (p q) ) p
( (p ~p) q) ~ q

7-Dadas las siguientes proposiciones compuestas, hallar su valor de verdad si: p = v q = f r = - p s = - r
(p q) ((r s) p)
(p (r s) q ) falso
((p q) (q r)) (p r)

8-Encuentre la expresin representada en esta tabla de verdad
P Q R
V V V F
V V F F
V F V F
V F F V
F V V V
F V F V
F F V F
F F F F

9-Formalice cada uno de los siguientes enunciados en trminos de lgica proposicional
Si Micaela ganas las olimpiadas, todos la admiran y ella ser rica
Si la liebre est alerta y es rpida, ni el zorro ni la lince podrn atraparla
Si no estoy equivocado, ella conduca un coche rojo y haba un hombre sentado a su lado
Podemos o bien tratar de obtener la aprobacin de la amortizacin y comprar la casa, o bien esperar si llegamos a un
acuerdo mejor

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
7
Si hoy hay clase de clculo a todos nos va bien y sacaremos buenas notas, y si no hay clase de clculo estudiaremos
para sacar buenas notas.
La lgica proposicional es fcil y til si y solo si los estudiantes la aprenden y los profesionales la aplican.
Una proposicin puede ser verdadera si su negacin es falsa.
Hoy hay quiz si los estudiantes no preguntan
Dos es primo por lo tanto dos es el nico primo par
Si 10 es primo, 10 no puede ser igual a 2 por 5. 10 es igual a 2 por cinco. Por lo tanto 10 es primo
Prolog es fcil si los estudiantes desarrollan los ejercicios recomendados y prolog es difcil si los estudiantes no
preguntan.
6 es par porque 6 un nmero mltiplo de 2

10-Simplificar las siguientes expresiones
( p V ) (V q) (p p)
( (p p) q ) ~q
(p (p q) ) p
( (p ~p) q) ~ q

11-Dadas las siguientes proposiciones compuestas, hallar su valor de verdad si: p = q = falsa ( Verdadera, Falsa,
Depende del valor de verdad de r y/o s)
( ) [ ] ( ) [ ] { } p ~ r q ~ p ~ r q p
( ) [ ] ( ) [ ] { } ) p ~ ( r q ~ p ~ p r q p
( ) ( ) { } ( ) ( ) [ ] { } r q p ~ ~ q ~ r ~ q ~ ~ p
( ) [ ] ( ) [ ] { } ) p ~ ( r q ~ p ~ p r q p
( ) [ ] ( ) [ ] { } ) ~ p ~ ( r q ~ p ~ p r q p
( ) ( ) { } ( ) ( ) [ ] { } r q p ~ ~ q ~ r ~ q ~ ~ p
) ) (( ) ~ ) ) ~ ((( p r q r r q p
) ) ((~ ) ~ ) ~ ((~ p s r q r q p
2.2 Reglas de equivalencia
Notacin utilizada en este documento:
Conjuncin

Disyuncin

Implicacin

Negacin ~
Equivalencia

Reglas de equivalencia


1. Doble Negacin (DN)
p p

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
8
2. Teoremas de Morgan (TM)
(p q) (p q)
(p q) (p q)
3. Conmutacin (CONM)
(p q) (q p)
(p q) (q p)
4. Asociacin (AS)
[p (q r)] [(p q) r]
[p (q r)] [(p q) r]
5. Distribucin (DIS)
[p (q r)] [(p q) (p r)]
[p (q r)] [(p q) (p r)]
6. Contraposicin (CP)
(p q) (q p)
7. Implicacin (IMP)
(p q) (p q)
8. Exportacin (EXP)
[(p q) r] [p (q r)]
9. Equivalencia (EQ)
[p q] [(p q) (q p)]
[p q] [(p q) (~ p ~ q)]

10. Medio Excluido (ME)
( p ~ p ) V
( p ~ p ) F
11. Identidad (ID)
( p F ) p
( p V ) p
12. Dominacin (DOM)
( p V ) V
( p F ) F
13. Idenpotencia (IDEMP)
( p p ) p
( p p ) p

12-Utilizando las leyes de equivalencia, demuestre las siguientes equivalencias:
(p q ) (q r) = q (p r)
( (p q ) p ) = F
( p ( r s ) ) = ( p r ) ( p s )
(p q) = (p q) (q p)
(p q) q = p q
((p q) r) ( p r q) = p r

13-Relacione cada uno de los conceptos de la derecha con los de la izquierda
( ) Expresin lgica que sin importar los valores de verdad de las
variables proposicionales siempre es verdadera
a. Conectivos lgicos

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
9
( ) Si p es verdadera y q es falsa entonces la expresin q p b. Proposicin
( ) Si p es verdadera y q es falsa entonces la expresin F q p ) (~ c. Es equivalente a V
( ) Expresin de la cual se puede afirmar que es verdadera o falsa d. Predicado
( ) Si p es verdadera y q es falsa entonces la expresin p q p ~ ) (~
es
e. Es equivalente a F
( ) Expresin lgica que sin importar los valores de verdad de las
variables proposicionales siempre es Falsa
f. Reglas de equivalencia
( )
Si p es Falsa y ~q es falsa entonces la expresin r q p ~ ) (~ g. Variable proposicional
( ) Smbolos que se utilizan para unir proposiciones simples h. Es equivalente a r ~
( ) Una expresin lgica puede ser sustituida por otra expresin lgica
equivalente haciendo uso de...
i. Contradiccin
( )
La expresin )) ( ) (( ~ F r V p k. Lgica
m. Constante proposicional
n. Tautologa
p. Es equivalente a p ~
q. Es equivalente a p
r. Es equivalente a q ~

14-La negacin lgica del enunciado "Si hoy hay parcial entonces sacar buena nota" es:
a. Si no hay parcial entonces no sacare buena nota
b. Si hay parcial entonces no sacar buena nota
c. Hoy hay parcial y no sacar buena nota
d. Hoy no hay parcial o no sacar buena nota
e. Ninguna de las anteriores

15-La negacin lgica del enunciado "Si te portas bien entonces te llevo al cine" es:
a. Si no te portas bien entonces no te llevo al cine
b. Si te portas bien entonces no te llevo al cine
c. Te portas bien y no te llevo al cine
d. Ninguna de las anteriores

16-La negacin lgica del enunciado "hoy hay parcial de paradigmas y a todos nos va bien" es:
a. hoy hay parcial de paradigmas y a todos nos va mal
b. hoy no hay parcial de paradigmas y a todos no nos va mal
c. A todos nos va mal u hoy no hay parcial de paradigmas
d. hoy hay parcial de paradigmas o a todos nos va bien
e. Ninguna de las anteriores

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
10

17-La negacin lgica del enunciado "hoy hay parcial de lgica y hay clase de calculo" es:
a. hoy hay parcial de lgica no hay clase de clculo
b. hoy no hay parcial de lgica y no hay clase de clculo
c. hoy no hay clase de clculo o no hay parcial de lgica
d. hoy hay parcial de lgica o hay clase de clculo
e. Ninguna de las anteriores

18-Cual es la negacin lgica del enunciado "hoy hay quiz de paradigmas si hoy es viernes?. Justifique su respuesta
19-Esta expresin lgica r q p ) (~ es equivalente a:
a. ) ~ ( ~ q p r
b. r q p ) ~ ( ~
c. q p r ~
d. ) (~ ~ r q p
e. a y b
f. a y c
g. a y d
h. b y c
i. Toda las anteriores
j. Ninguna de las anteriores

20-Escriba por lo menos 10 formas equivalentes de la siguiente expresin ( (r ~p) q) ~ q

21-Simplificar a una forma normal
(p ( p q)) p
p (q ( p q ) ) ( ( p q ) p) q
( ( p q ) r ) q
(p q) r
(p q) (r ~q)
( ( p q ) r ) q
) ( ) (~ r p q p
r q p ) (~
) ( )) ( ) (( q p r q q p

22-Reducir la siguiente expresin a una forma normal conjuntiva
p (q p)
( p q ) r

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
11

2.3 Razonamientos con lgica Proposicional
Un razonamiento es el proceso mediante el cual a partir de un conocimiento dado como cierto (premisas) se deduce
nuevo conocimiento (conclusin) aplicando reglas de equivalencia y reglas de inferencia.
Reglas de inferencia
1. Modus Ponens (MP)
p q
p
Infiere q

2. Modus Tollens (MT)
p q
~ q
Infiere ~p

3. Silogismo Disyuntivo (SD)
p q
~ p
Infiere q

4. Simplificacin (S)
p q
Infiere p

5. Conjuncin (C)
p
q
Infiere p q

6. Silogismo Hipottico (SH)
p q
q r
Infiere p r

7. Adicin (AD)
p
Infiere p q

8. Dilema constructivo (DC)
p q
r s
p r
Infiere q s

9. Absorcin (AB)
p q
Infiere p (p q)

10. Casos (CAS)
p q
p q
Infiere q

11. Inconsistencia (IN)
p
p
Infiere q


23-Formalizar el siguiente razonamiento
La lgica es difcil y til. Si la lgica es til y los estudiantes la aprenden entonces la lgica es fcil. Por lo tanto los
estudiantes no aprenden la lgica.
Los pasos para formalizar un razonamiento son los siguientes.
Identifique las premisas del razonamiento. Tpicamente una premisa termina con un punto seguido o aparte. En este
ejercicio se identificaros tres premisas. Las dos primeras corresponden a las hiptesis del razonamiento y la tercera a la
conclusin.
Identifique las proposiciones simples en cada una de las premisas, interprete su significado y asigne una variable
proposicional a cada una de las proposiciones simples en su enunciado afirmativo. Tenga cuidado con no asignar dos
variables proposicionales a expresiones que tienen significados relacionados como por ejemplo la lgica es fcil y la
lgica es difcil son premisas relacionadas pues la una es la negacin de la otra; por lo tanto se debe seleccionar una
de ellas y asignarle un nombre mediante una variable preposicional: p=la lgica es fcil por lo tanto la lgica es
difcil es p. El enunciado de una proposicin simple debe ser completo, es decir debe tener sentido completo, por
ejemplo llamar q= til ; no es una proposicin simple con sentido completo, es necesario recurrir al contexto y enunciar
de manera completa la proposicin simple, en este caso se refiere a la lgica es til luego la proposicin es q= la lgica
es til.
Para este ejercicio:
p= la lgica es fcil
q= la lgica es til
r= los estudiantes aprenden lgica

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
12

Una vez identificadas las proposiciones atmicas es necesarios releer cada una de las premisas e identificar los
conectivos en cada premisa. Los signos de puntuacin son muy importantes pues algunos de ellos indican conectivos
(tpicamente pero no siempre una coma es un and, un punto y coma es un or). Tambin es muy importante algunas
palabras como: si, entonces, si y solo si.
La implicacin es uno de los conectivos que ms cuidado hay que tener al identificarlo e interpretarlo, dado que no es
conmutativo, y cada una de las partes de la implicacin tiene un rol dentro de la expresin compuesta, estos son el
antecedente y el consecuente. Por lo tanto en una expresin de este tipo es necesario identifica que es causa y que es
consecuencia y la expresin quedar de la forma causaconsecuencia. Por ejemplo en el enunciado hoy hay quiz si
hoy es martes el hecho de ser martes causa que se realice el quiz por lo tanto el antecedente es hoy es martes y el
consecuente es hoy hay quiz si asignamos las variables p=hoy hay quiz y q=hoy es martes entonces la expresin
quedar q p. Este misma expresin pudo haber sido escrita como Si hoy es martes entonces hay quiz que es
equivalente en significado y representacin. En un enunciado textual que tenga la palabra Si y la palabra entonces,
el antecedente es la expresin que est entre el si y el entonces y el consecuente es lo que se encuentra despus de
la palabra entonces.
Otro aspecto muy importante en la correcta simbolizacin de una expresin es el uso de signos de agrupacin, sin
embargo no tengo ninguna recomendacin ms que utilizar un adecuado anlisis e interpretacin de las expresiones,
tratando de utilizar signos de agrupacin por cada operador lgico que se preste para ambigedades.
Una vez terminado este proceso se debe formular las expresiones para cada una de las premisas identificadas.
En este ejemplo ser
pq
(qr)p
r
Identificadas las premisas, se deben diferenciar las premisas que son hiptesis y la conclusin. Tipicamente la
conclusin es una sola premisa que se enuncia despus de conectivos textuales como: por lo tanto, en conclusin,
de lo cual se desprende, de lo cual se concluye, etc.
en este ejemplo el razonamiento quedar
Premisa 1: pq
Premisa 2: (qr)p
_________________
Conclusin : r
Una vez termindo el proceso de simbilizacin del razonamiento se procede a usar las reglas de inferencia y de
equivalencia para demostrar su validez, es decir si a partir de las premisas consideradas como hiptesis, se puede llegar
a la conclusin.

24-Aplique el anterior procedimiento para simbolizar el siguiente razonamiento.
Si sobra tiempo en la clase entonces los estudiantes preguntan o hay quiz. Si hoy es viernes entonces sobra tiempo en la
clase. Los estudiantes no preguntaron. Por lo tanto si hoy es viernes entonces hay quiz.
q (p s)
r q
p
Conclusin r s

25-Relacione cada tem de la derecha con las expresiones de la izquierda
( ) Expresin equivalente a Si hoy es a. Hoy hay examen de paradigmas si es jueves

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
13
jueves entonces no hay examen de
paradigmas
( ) La negacin de Si hoy es jueves
entonces no hay examen de
paradigmas
b. Hoy no hay examen de paradigmas y no es jueves
( ) Expresin equivalente a Si hoy no hay
examen de paradigmas entonces hoy no
es jueves
c. Hoy no hay examen de paradigmas o no es jueves
( ) La negacin de Si hoy no hay examen
de paradigmas entonces hoy no es
jueves
d. Hoy es jueves y no hay examen de paradigmas
( ) Expresin equivalente a: No es cierto
que si hoy no hay examen de
paradigmas entonces hoy es jueves
e. Hoy es jueves y hay examen de paradigmas

26-Utilizando las reglas de inferencia y de equivalencia, demostrar la conclusin a partir de las premisas en los
siguientes razonamientos
p q
r
( r q)
p q
( s p) r
q
Conclusin ... p Conclusin... r

c
a b
( c b )
a ( c b)
(c b) d

Conclusin ... a Conclusin ... a d

27-Elabore una sntesis de las reglas de inferencia, explique con sus palabras y de un ejemplo citando expresiones
lgicas en lenguaje natural.

28-Analice la siguiente
demostracin de validez del
razonamiento
(1) p q (premisa)
(2) ~p (~ p r) (premisa)
Concluir (q p) p
Demostracin:
(3) p (p q) abs. (1)
(4) p (q p) conm. (3)
(5) p (~ p . r) imp. (2)
(6) (p ~ p) (p r)dis. (5)
(7) p ~ p sim. (6)
(8) (p ~p) ~ q ad. (7)
(9) p (~ p ~ q)asc. (8)
(10) p ~ (p q) tm. (9)
(11) p ~ (q p)conm. (10)
(12) ~p ~ (q p)imp. (11)
(13) (q p) p coptra. (12)
(14) [(q p) p] [p (q p)]
con. (13), (4)
(15) (q p) p eq. (14)

Encuentre las leyes o reglas que
se aplicaron en la derivacin de
cada una de lneas siguientes a las
premisas
29-
~p (p)
~p q
p q


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
14

30-
(p q) (p)
r (p)
r (p q)
(r p) (r q)

31-
(p q) r (p)
p (p)
p q
r

32-
(p s) (q r) (p)
p q (p)
p
q r
q
r

33-
(p q) (r s) (p)
(s t) ~ (r s) (p)
~ (r s) (s t)
(r s) (s t)
(p q) (s t)

34-
(p q) r (p)
(r s) t (p)
p q (p)
(p q) (r s)
r t

35-
p (q s) (p)
~ r ~ (q s) (p)
p (p)
(q s) r
p r

36-
~p (p)
~p ~q
~ (p q)
~ (p q) r
(p q) r

37-
~ (p q) (p)
~ (~p q)
~ ~p ~q
p ~q
~q

38-
p q (p)
q [p (r s)] (p)
r s (p)
~ (r s) (p)
(r s) (~r ~s)
~r ~s
~ (r s)
p [ p ( r s)]
(p p) (r s)
p (r s)
~ p
~p q
p q

39-
(q r) (s p) (p)
~s (p)
~s ~p
~(s p)
~ (q r)
~q ~r
~q
~q p

Demuestre la validez de los
siguientes argumentos,
deduciendo la conclusin a partir
de las premisas, mediante la
aplicacin de las reglas de
inferencia.

40-
p
(p q) r
Conclusin ~r ~q
41-

p (q r)
~q ~r
Conclusin ~p

42-
~ p q
~ r ~q
Conclusin p r
43-
~ (q ~r)
p q
Conclusin p r

44-
(~p q) r
p q
Conclusin r s

45-
~r
~p (r q)
Conclusin p

46-
q (p r)
~p
Conclusin q

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
15

47-
~r ~ (q p)
p s
Conclusin r t

48-
~p (q r)
~q
Conclusin p

49-
~s
q (r s)
Conclusin ~q ~r

50-
~p (q r)
conclusin (p q) (p r)


51-
~p
conclusin ~ (p ~q)

52-
p q
~ (q ~r)
Conclusin p s

53-
(r s) (q p)
~ p
Conclusin r

54-
p q
Conclusin p ~q

55-
~r (q p)
Conclusin ~p v (~r q)

56-
~r p
(p q) r
Conclusin ~q

57-
r s
(t ~r) ~s
Conclusin ~r

58-
~ p q
~ (~ s p) ~r
~q
Conclusin ~r



59-
~p
(q p) r
~q
Conclusin ~ (r t)

60-
p (~q s)
q p
Conclusin ~q

61-
~r ~ (q p)
~r p
Conclusin ~q

62-
~ (p q) ~r
(~ p q ) r
Conclusin p

63-
p (q r)
~r s
~s t
Conclusin t (~q ~ p)

64-
q (r s)
r ~p
~ (~q p)
Conclusin s

65-
s u
~(r ~u)
~s
conclusin ~r

66-
q (p s)
r q
p
Conclusin r s

67-
(p q) (r s)
~s
p
Conclusin r t

68-
(p q) (s t)
~p r
s ~t
Conclusin r

69-
p q

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
16
r s
(q s) t
~t
Conclusin ~ (p r)

70-
~p (q r)
(p s) t
~ (p s) ~r
~t
Conclusin ~q

71-
~ (p ~s) ~q
~s (~t ~p)
Conclusin ~q t

72-(p r) (p q)
p ~q
Conclusin r

73-
[p (q r)] (s t)
~q p
Conclusin ~ t s

74-
[ q (r s)] (q r)
~ (s ~p)
Conclusin p (q s)

75-
p [(q u) r]
(~r s) t
Conclusin p (u t)

76-
p (r q)
(r q) s
Conclusin p s

77-
[(p q) (r s)] (s q)
(q t ) ( t u)
(u ~r)
Conclusin ~q

78-
[(q t) (u s)] (r ~s)
q u
t r
Conclusin p

79-
~ p q
(s ~p) ~r
~q
Conclusin ~r


Simbolice los siguientes razonamientos y demuestre su validez utilizando las reglas de equivalencia y de inferencia
80-Si Samuel es inteligente y estudia mucho, sacar buenas notas y aprobar el curso. Si Samuel estudia mucho, pero
carece de inteligencia, sus esfuerzos sern justipreciados, y si los son aprobar el curso. Samuel es inteligente, por lo
cual estudia mucho. Luego, Samuel aprobar el curso. (I. E, B. C, A)

81-Si el despensero hubiera estado presente, entonces habra sido visto, y si hubiera sido visto, habra sido interrogado.
Si hubiera sido interrogado, habra contestado, y si hubiera contestado se le habra odo. Pero el despensero no fue
odo. Si el despensero no fue visto ni odo, entonces debe haber estado en su trabajo. Si estaba en su trabajo, debi
estar presente. Luego, el despensero fue interrogado. (P, V, I, C, 0, T)

82-Si se presentan los sntomas ordinarios de un resfro y el paciente tiene alta temperatura, entonces, si tiene pequeas
manchas en la piel, est con sarampin. Claro est que el paciente no puede tener esta enfermedad si su historia clnica
revela que ya la tuvo. El paciente tiene alta temperatura y su historia clnica revela que ha tenido sarampin antes.
Adems de los sntomas ordinarios de un resfro tiene manchas en la piel. Concluyo que el paciente tiene una infeccin
viral. (0, T, M, S, R, V). Nota: al realizar este ejercicio, observar que la conclusin (V), no se encuentra en las
premisas y, sin embargo, se puede deducir de ellas. Por qu? Porque sus premisas encierran una contradiccin -
encuntrela- y de una contradiccin se puede derivar cualquier cosa. Es decir, si una persona admite p. ~p, puede
aceptar lo que sea.

83-Si Dios quisiera evitar el mal pero fuera incapaz de hacerlo, sera impotente; si fuera capaz de evitarlo pero no
quisiera hacerlo, sera malvolo. El mal slo puede existir si Dios no quiere o no puede impedirlo. El mal existe. Si
Dios existe, no es impotente ni malvolo. Luego, Dios no existe. (Q, C, I, M, E, D).

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
17

84-Si compro un automvil nuevo esta primavera o hago ajustar mi automvil viejo, ir a Canad en el verano y parar
en Duluth. Visitar a mis padres, si paro en Duluth. Si visito a mis padres insistirn en que pase el verano con ellos.
Si insisten en que me quede con ellos durante el verano, estar all hasta el otoo. Pero si me quedo all hasta el otoo
no ir a Canad. Por consiguiente no har ajustar mi automvil viejo. (N, H, C, D, V, I, 0).

85-Si el despensero dijo la verdad, entonces la ventana estaba cerrada cuando entr a la habitacin, y si el jardinero
dijo la verdad, entonces el sistema de riego automtico no funcionaba la noche del crimen. Si el jardinero y el
despensero mienten, entonces debe existir una confabulacin para proteger a alguien de la casa y habra habido un
pequeo charco de agua en el piso junto a la ventana. Sabemos que la ventana no pudo estar abierta cuando el
despensero entr en la habitacin. Haba un pequeo charco de agua sobre el piso, justo al lado de la ventana. Luego,
si hay una confabulacin para proteger a alguien de la casa, entonces el jardinero no dijo la verdad. (D, V, J. R, C, A).

86-El jefe de ellos abandonara el pas si temiera ser capturado y no lo abandonara a menos que temiera ser capturado.
Si temi ser capturado y abandon el pas, la red de espionaje enemiga estar desmoralizada y no tendr poder para
saboteamos. Si no temi ser capturado y permaneci en el pas, eso significara que ignoraba la labor de nuestros
agentes. Si realmente ignora la labor de nuestros agentes, entonces nuestros agentes pueden consolidar su posicin
dentro de la organizacin enemiga, y si lo logran, harn que la red de espionaje enemiga carezca de poder para
saboteamos. Luego carecer de poder para saboteamos. (J, T, E, P, 1, C).

87-Si los estudiantes preparan el examen, entonces hay parcial de lenguajes, y si hoy hay parcial de paradigmas
entonces los estudiantes lo respondern correctamente. Si los estudiantes responden el examen correctamente, sacaran
buenas notas y si sacan buenas notas entonces aprobaran la materia. Los estudiantes no aprobaron la materia. Si no hay
parcial de paradigmas y los estudiantes no aprobaron la materia entonces los estudiantes estaban enterados del examen.
Si estaban enterados del examen entonces prepararon el examen. Por lo tanto hoy hay parcial de paradigmas o los
estudiantes aprueban la materia.

88-Los delincuentes se refugian en otro pas si y solo si Colombia es soberana y el gobierno no invade territorio
extranjero. Los delincuentes se someten voluntariamente a la ley o se refugian en otro Pas. Si Colombia es soberana
entonces el gobierno invade territorio extranjero. Por lo tanto los delincuentes se someten voluntariamente a la ley

89-Si los estudiantes hicieron la tarea entonces presentaran el parcial. Si los estudiantes estudiaron para el parcial
entonces sacaran buenas notas. Si presentan el parcial o sacan buenas notas entonces pasaran la materia. Los
estudiantes no pasaron la materia. Por lo tanto no hicieron la tarea y no estudiaron para el parcial.

90-Los estudiantes de paradigmas no estudian o tienen suerte. Si los estudiantes de paradigmas son indisciplinados o
no estudian, entonces no aprobaran el curso. Los estudiantes de paradigmas no tienen suerte. En conclusin los
estudiantes de paradigmas no aprobarn el curso.

91-La jubilacin no es un derecho o no es voluntaria, si y solo si las leyes colombianas no son justas. Si la jubilacin
no es un derecho o es voluntaria, entonces, las leyes colombianas son justas. En conclusin si la jubilacin es un
derecho entonces es voluntaria.

92-Si el estudiante presta atencin o presenta los parciales a tiempo entonces pasar la materia y mejorar el promedio.
El estudiante no pas la materia. Por lo que se deduce que no present los parciales a tiempo

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
18
93-Los realitis de la televisin no son crueles o los Colombiamos somos masoquistas si y solo si los realitis son
seguidos por los intelectuales. Los realitis son crueles y no son buenos para los nios. Los colombianos no somos
masoquistas. Por todo lo anterior deducimos que los realitis no son seguidos por intelectuales o la televisin es de mala
calidad.

94-Si la huelga es necesaria entonces los estudiantes se manifestarn. Si los estudiantes se organizan entonces la
dictadura decaer. Si los estudiantes se manifiestan o la dictadura decae entonces la justicia no es ciega. La justicia es
ciega. Por lo tanto la huelga es innecesaria y los estudiantes no se organizarn

95-Uribe ser candidato a la presidencia y los dems candidatos no tendrn garantas si pasa el referendo entonces. Si
Uribe es candidato o los dems candidatos no tienen garantas entonces las elecciones presidenciales no sern
interesantes. Por lo tanto si las prximas elecciones son interesantes fue por que no paso el referendo

96-Hoy hay energa elctrica o no ser necesario un plan b para el examen. Hoy hacen mantenimiento de la red
elctrica si hay examen. Hoy no hacen mantenimiento de la red elctrica o no hay energa elctrica. Si hoy realizan
mantenimiento de la red elctrica, entonces es necesario un plan b para el examen. Por lo tanto hoy no hay examen

97-Espaa rein en la nueva granada o el movimiento comunero no tuvo xito. Si la esclavitud permaneci o Espaa
reino en la nueva granada entonces la libertad no fue real. El movimiento comunero tuvo xito. Por lo tanto la libertad
no fue real.

98-Si la corrupcin no es parte de la naturaleza humana o el gobierno la permite, entonces o el carrusel de la
contratacin no seguir funcionando o los corruptos irn a la crcel. Los corruptos no van a la crcel. La corrupcin no
es parte de la naturaleza humana. Por lo tanto, los alcaldes seguirn haciendo malos contratos si el carrusel de la
contratacin sigue funcionando.

2.4 Lgica de predicados.
99-Defina los siguientes conceptos:
Universo de discurso
Predicado
Trmino
Cuantificador

100-Cul es la diferencia entre la lgica de predicados y la lgica proposicional?

101-Represente en trminos de lgica de predicados los siguientes enunciados:
Alguna mujer es madre de Luisa
Todos los seres humanos tienen una madre
Algunos seguidores de Aristteles siguen a Aquino
Todo amigo de Luis y de Carlos es amigo de Antonio
Todo primo mayor de 2 es impar

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
19
2.5 Representacin de Conocimiento (RC) con lgica de predicados
Por ser una forma de Representacin de Conocimiento (RC) tan natural, la lgica puede emplearse para describir
cualquier afirmacin dentro de cualquier dominio. Para realizar la representacin debe tenerse en cuenta el siguiente
proceso:
(1) Identificar el dominio en el cual se encuentra el conocimiento que se desee representar (matemticas, biologa,
filosofa, medicina, etc.).
(2) Interpretar el conocimiento formulado en el lenguaje natural.
(3) Identificar los tipos de objetos de los que se habla en el enunciado
(4) Separar o identificar las caractersticas de los objetos y/o relaciones entre los objetos que dan la idea de predicados.
(5) Escoger los smbolos de la lgica para los predicados y el nmero de objetos involucrados en los predicados.
Cuando un predicado expresa caracterstica de un objeto, solamente esta involucrado un objeto. Cuando expresa
relacin estarn involucrados dos o ms objetos, en tal caso es necesario definir un orden en cada uno de los objetos,
que determinaran el rol del objeto dentro del predicado.
(6) Identificar los conectivos
(7) Escribir la Formula Bien Definida (FBD). (Expresiones lgicas en forma de predicados)

Por ejemplo
Los peces excepto los tiburones son amables con los nios.
(x,y) (pez(x) tiburn(x)) amable(x, y) nio(y)

102-Exprese los siguientes enunciados en trminos de predicados.
Los mamferos son vertebrados y poseen un ciclo de vida completa.
Los pjaros cantores vuelan.
Ningn ser inerte muere.
La ballena es un mamfero pero no es pez o reptil.
Algunas aves no vuelan.
La ciencia avanzar y la tecnologa tambin si hay investigacin cientfica.
El 13 es nmero primo e impar.
Todo amigo de Luis y de Carlos, es amigo de todo el mundo.
Ningn nmero impar divide a todos los dems nmeros
Si alguien puede hacerlo, Juan puede hacerlo.

103-Exprese los siguientes razonamientos en trminos de predicados
P1: Ningn profesional es indeciso
P2: Todos los buenos ingenieros son profesionales.
P3: Carlos es un buen ingeniero

Pl: Los escritores no saben de astronoma.
P2: Los astrnomos saben de astronoma.
P3: Algunos escritores saben interpretar seales astronmicas.
P4: Pedro y Luis son escritores.


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
20
Pl. 2 es primo.
P2.- Para todo primo hay un primo mayor que l
P3: Todo primo mayor que 2 es impar.
C: Existen primos impares

Pl: El murcilago es un animal mamfero.
P2: Los animales son vertebrados o invertebrados.
P3: Los mamferos son vertebrados y vivparos.

Represente los siguientes razonamientos en trminos de predicados
104-Todos los deportistas de baloncesto son altos y giles. Todos los deportistas de atletismo son delgados y rpidos.
Existen algunos deportistas de natacin que no son delgados ni giles. Si existe un deportista de atletismo que no sea
rpido y que tambin sea deportista de baloncesto, entonces tambin es deportista de natacin. Por lo tanto todos los
deportistas de baloncesto y de ftbol son de natacin.

105-Todos los estudiantes de sistemas cursan paradigmas de programacin si y solo s aprueban estructuras de
programacin. No todos los estudiantes de sistemas que cursan paradigmas, cursan sistemas operativos. Todos los
estudiantes que aprueban estructuras, aprueban bases de datos. Existen algunos estudiantes que cursan paradigmas y no
estudian sistemas. Por lo tanto no todos los estudiantes que cursan paradigmas estudian sistemas.

106-Todos los ingenieros saben programar si y solo s estudian en la universidad de Pamplona. No todos los ingenieros
que saben programar conocen prolog. Todos los ingenieros que conocen prolog desarrollan sistemas expertos y
aplicativos empresariales. Existen ingenieros no conocen prolog y no desarrollan aplicativos empresariales. Por lo tanto
no todos los ingenieros que estudian en la universidad de Pamplona saben programar.

107-Todo los seres de la naturaleza son o animales o vegetales o minerales. Algunos seres de la naturaleza son
animales. Algunos animales son seres humanos. Si todos los seres Humanos son animales entonces tienen un ciclo de
vida completo. Todos los seres de la naturaleza que tienen ciclo de vida completo son o animales o vegetales. Juan es
un ser Humano. Por lo tanto Juan tiene un ciclo de vida completo y es un animal.

108-Todas las mujeres mayores de 20 aos, son inteligentes y tienen amigos inteligentes. Mara es una mujer que tiene
20 aos y es amiga de Pedro y de Luis. Todos los hombres mayores de 30 aos pertenecen a un club o a un equipo de
ftbol. Existen algunos hombres inteligentes que no tienen amigas inteligentes. Para todo hombre inteligente existe una
mujer no inteligente que es amiga de dicho hombre. Para cada mujer inteligente existe un hombre mayor de 25 aos
amigo de amigo de Antonio. Por lo tanto Pedro y Luis son amigos y son inteligentes.

109-Todo animal que tiene pelo, es mamfero. Existen algunos animales que producen leche, y no son mamfero. Si un
animal tiene plumas es un ave y produce huevos. No todo animal que vuela y produce huevos es un ave. Si Existen
animales que son ave, no vuelan y nadan, se trata de un pingino. Por lo tanto existen aves que no tienen pelo y son
mamferos.

110-Todo animal que tiene pelo o da leche es mamifero. Todo animal que tiene plumas es un ave. Existen animales que
vuela y pone huevos y no son ave. Si un animal come carne es carnvoro. Piolin tiene plumas y Tom es carnvoro, por
lo tanto Piolin es un ave y Tom es un mamfero.


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
21
2.6 Miscelnea sobre lgica
111-Si la proposicin p es falsa y q es verdadera, que
valor de verdad tendr la siguiente expresin.
( ) [ ] ( ) [ ] { } ~p r ~q ~p r q p
Verdadera
Falsa
Depende de r
Todas las anteriores
Ninguna de las anteriores

112-Cuales de las siguientes expresiones son
proposiciones
4 = 5
Juan es un nombre
8 es primo
hoy es viernes?
Todas las anteriores

113-Cual de las siguientes afirmaciones es un
proposicin atmica?
Todos los gatos tienen siete vidas
Juan es buen estudiante y Pedro tambin
Juan y Pedro son altos
Pedro es amigo de Juan y Juan es amigo de Jorge
Todas las anteriores

114-La siguiente expresin corresponde a:
( ) ( ) q p q p
Tautologa
Contradiccin
Contingencia
Todas las anteriores
Ninguna de las anteriores.

115-La siguiente expresin es equivalente a:
q p
a. q p ~
b. p q ~ ~
c. ) ~ ( ~ q p
d. Todas las anteriores
Ninguna de las anteriores

116-La siguiente tabla de verdad corresponde a la
expresin
P q ???
V V V
V F F
F V F
F F V
a. r q p ) (~
b. p q ~ ~
c. ( ) q p q p ~ ~ ) (
d. Todas las anteriores
Ninguna de las anteriores

117-Se dice que una expresin lgica est escrita en su
forma normal disyuntiva si
Est escrita como una conjuncin de disyunciones de
literales
Si est escrita como una disyuncin, en la cual todos
los trminos son conjunciones de literales
Si es una contradiccin
Si es una tautologa
Todas las anteriores


118-La lgica de predicados se diferencia de la lgica
propocicional en que:
a. Las afirmaciones llamadas predicados describen
ciertas propiedades o relaciones existentes entre
individuos u objetos
b. El uso de cuantificadores
c. Los predicados describen la estructura interna de las
afirmaciones
d. Todas las anteriores
e. Ninguna de las anteriores

119-Un predicado

a. Tiene un valor de verdad absoluto sin importar el
universo de discurso

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
22
b. Expresa relaciones o caractersticas de individuos o
objetos
c. es igual que una proposicin
d. Todas las anteriores
e. Ninguna de las anteriores

2.7 Programacin lgica
Este paradigma se basa en la lgica simblica. En un lenguaje de programacin lgico, un programa est formado por
un conjunto de enunciados que describen lo que es verdad con respecto a un resultado deseado, en oposicin a dar una
secuencia particular de enunciados que deben ser ejecutados en un orden fijo para producir el resultado. Un lenguaje de
programacin lgico puro no tiene la necesidad de abstracciones de control como ciclos o seleccin. El control es
suministrado por el sistema subyacente. Todo lo que se necesita en un programa lgico es el enunciado de las
propiedades del cmputo. Por esta razn a la programacin lgica se le cataloga como programacin declarativa, dado
que las propiedades se declaran, pero no se especifica una secuencia de ejecucin.
2.8 Prolog
2.8.1 Introduccin
Prolog es un lenguaje basado en las reglas de la lgica. Los programas de prolog se expresan en una base de
conocimiento que consta de hechos y reglas. Los hechos enuncian los datos bsicos tales como las propiedades de
ciertas entidades. Por su parte las reglas nos permiten hacer inferencias tomando como base estos datos. La
informacin se extrae de la base de conocimiento por medio de consultas. Las consultas se corresponden en este
sentido, con la conclusin de una derivacin, mientras que la base de conocimiento proporciona las premisas. Lo ms
importante es que todas las premisas se puedan considerar ejecutables, lo cual hace de prolog un lenguaje de
programacin y hace de la base de conocimiento un programa. De hecho todo programa resoluble en un lenguaje de
programacin tradicional se puede resolver tambin en prolog. Sin embargo existe una diferencia importante entre
prolog y los lenguajes de programacin ms tradicionales como pascal, c, o basic. Los programadores de estos
lenguajes tienen que indicar todos los pasos necesarios para transformar la entrada en la salida, mientras que en prolog
basta con indicar las condiciones que debe satisfacer el programa para que sea correcto. En este sentido prolog es un
lenguaje declarativo, por oposicin a los lenguajes de procedimientos.
Los lenguajes declarativos no resuelven el problema mediante una secuencia de pasos, tal como se hace en los
lenguajes de procedimientos. En lugar de hacer esto, el computador genera los pasos necesarios para transformar la
entrada en la salida a partir de un cierto nmero de sentencias declarativas, tales como las reglas y los hechos.
Evidentemente esto le ahorra tiempo al programador y hace que los programas sean mucho ms compactos. Por otra
parte el computador puede no identificar la solucin ms eficiente.
Dado que los hechos y reglas son sentencias lgicas, su orden debera ser irrelevante. En la prctica, esta meta ideal no
se alcanza en todas las ocasiones. El orden de las sentencias de un programa en prolog influye ciertamente en la
eficiencia, y algunas versiones requieren, incluso colocar las sentencias en un orden determinado.
2.8.2 Historia de prolog
Prolog significa "PROgramming in LOGIC" y es un lenguaje de programacin que fue inventada alrededor de 1970
por Alain Colmerauer y sus colegas de la universidad de Marsella. Rpidamente prolog se convirti en el lenguaje de
programacin para inteligencia artificial en Europa, mientras que LISP (otro lenguaje de programacin usado por los
investigadores en inteligencia artificial) se usaba principalmente por los programadores en estados unidos. A finales de
los aos 70 comenzaron a aparecer versiones de prolog para computadores. Uno de los compiladores de prolog ms
populares para micro computadoras fue el micro prolog y se dedicaron muchos libros de prolog a el. Pero el micro
prolog no ofrece la riqueza de predicados que ofrece l turbo prolog .
No existi mucho inters por l turbo prolog, hasta que los cientficos japoneses lanzaron su famoso proyecto de la
quinta generacin con el objetivo de disear nuevos computadores y software, los cuales no tendran rivales en los aos

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
23
1990 y posteriores. No fue simple coincidencia que eligieran el prolog como lenguaje en que basar su trabajo. De
repente la gente comenz a mirar de otra forma el prolog y a sus posibilidades.
Estructura general de un programa
Un programa en prolog se ve como una demostracin matemtica, en el cual el programador define los
axiomas(hechos) y las reglas de inferencia y el motor de inferencia de prolog, se encarga de hacer uso de dichos
axiomas y reglas , para demostrar teoremas.
Un programa en prolog tiene la siguiente estructura:

Domains
a=integer
b=string
c=symbol
l=a*
database-base
pdb1(a,b,...c)
pdb2(b,c)

predicates
p1(a1,a2.....an)
p2(b1,b2.....bn)

clauses
p1(n,m,......w)
p2(j,k..........l)

goal
p2(a,b, ......Y).

2.8.3 Base de datos en prolog
Las bases de datos son archivos de texto, que son consultados por prolog. Esto significa que se lee informacin y
dependiendo del sistema utilizado, esa informacin o bien se compila al principio de la sesin o bien se interpreta a
medida que sea necesario. El archivo que contiene la base de datos se puede preparar en un editor de texto normal .Una
vez preparada la base de datos, se puede activar el sistema de prolog del que se disponga .Al principio prolog esta en
modo de bsqueda, y la primera consulta que suele emplearse es una consulta en la base de datos .
Una vez que se ha consultado con xito un archivo, se puede introducir consultas que impliquen a la base de datos en
cuestin. Es posible aadir clusulas a la base de datos desde el modo de consultas.
2.8.4 Listas
Todo lenguaje de programacin necesita estructuras que permitan tratar colecciones de datos. En prolog no hay
vectores ni matrices. Los programadores de prolog emplean listas en su lugar. Tal como implica el nombre una lista no
es ms que una coleccin de trminos tales como constantes, variables y estructuras. Las listas pueden tener incluso
otras listas.
Para accedera a los elementos de una lista se define la cabeza de una lista como el primer elemento de una lista que no
este vaca. Los elementos restantes forman una lista por si mismo, y esa lista se denomina cola de la lista. Por ejemplo
una lista [ a,b,c,d ] la cabeza es a la cola es la lista [b,c,d]. Una lista cuya cabeza es A y cuya cola sea B se puede
escribir de la forma [ A | B ]. Por ejemplo en lugar de [ a,b,c,d ] se puede escribir [ a | [b,c,d] ]. Estas dos expresiones
son equivalentes, y se pueden intercambiar libremente una por otra. Cuando se utiliza esta convencin, se pueden
definir una lista de la siguiente forma:
La lista vaca [ ] es una lista
Si A es un termino y B es una lista entonces [ A | B ] es una lista . Esta lista contiene a A como primer elemento,
mientras la lista B forma la cola de la nueva lista.
No hay nada ms que sea una lista.
Obsrvese que la lista vaca carece de cabeza y cola. La lista [ a ] tiene a a como cabeza , pero la cola es lista vaca.
En efecto la notacin que denota la cola es ms general de lo que se ha indicado aqu. Todas las entradas que se
encuentren delante de la | se consideran miembros individuales, mientras que todos los elementos que vayan detrs de |
forman en conjunto una lista, llamada cola. Por ejemplo la lista [ a,b,c,d ] tambin se puede escribir de la forma [ a,b |
c,d ] , aqu a y b son los dos primeros elementos, y la lista de elementos restantes es [ c, d ].
Cortes

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
24
El corte, que se abrevia de la forma! , es un predicado, que al ser invocado, fija todas las decisiones tomadas hasta ese
punto, impidiendo el retroceso. El corte siempre tiene xito. Una vez ejecutado el corte, todas las decisiones pasadas
que estn relacionadas con la llamada en cuestin quedan fijadas. No se pueden rehacer ninguna meta que preceda al
corte. Solo se permite el retroceso para las metas que se encuentren despus del corte. Adems si se ejecuta un corte
entonces la seleccin de clusula queda fijada, y si la clusula fracasa entonces no se prueba ninguna otra clusula del
mismo predicado. En general, hay que utilizar cortes siempre que haya que seleccionar una opcin entre alternativas
mutuamente excluyentes.
Los cortes tambin se pueden utilizar para podar opciones irrelevantes, lo cual reduce el tiempo de ejecucin.
Los cortes no pueden evitar todos los errores que se producen al utilizar en orden las clusulas.
2.9 Ejercicios con prolog
120- De acuerdo al siguiente programa en prolog
domains
persona=symbol
predicates
padre (persona, persona)
clauses
padre(juan,antonio)
padre(juana,antonio)
y otros muchos hechos de tipo padre
Modifique el programa, agregando los predicados que considere necesarios, y las reglas necesarias, para agregar las
reglas de inferencia de las relaciones "suegra" y "suegro".. suegra (persona,persona) y suegro (persona, persona).

121-Realice un programa en prolog para representar el siguiente conocimiento
Pedro padece gripe. Pedro padece hepatitis..Juan padece hepatitis.Mara padece gripe. Carlos padece intoxicacin. La
fiebre es sntoma de gripe. El cansancio es sntoma de hepatitis. La diarrea es sntoma de intoxicacin. El cansancio es
sntoma de gripe. La aspirina suprime la fiebre. El Lomotil suprime la diarrea.
Adems el programa debe representar las siguientes reglas:
Un frmaco alivia una enfermedad si la enfermedad tiene un sntoma que sea suprimido por el frmaco.
Una persona debera tomar un frmaco si padece una enfermedad que sea aliviada por el frmaco
Mediante objetivos externos y si es necesario defina otras reglas para dar respuesta a los siguientes interrogantes
Interrogante? Goal externo en prolog
Que dolencias tiene pedro?
Que dolencias tiene maria?
Quien padece gripe?
Que sntomas tiene pedro?
Quien esta cansado?
Que frmacos alivian a pedro?
Que sntomas comparten juan y maria?

122-Construir un programa en prolog que represente el siguiente conocimiento directo (hechos)

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
25
Bertoldo y Bartolo son rufianes. Romeo y Bertoldo, como su nombre lo indica, son nobles. Bartolo es un plebeyo.
Gertrudis y Julieta son damas. Julieta es hermosa.
Tambin se dispone del siguiente conocimiento indirecto (reglas)
Los plebeyos desean a cualquier dama, mientras que los nobles solo a aquellas que son hermosas.
Los rufianes, para satisfacer sus instintos, raptan a las personas a las que desean.
Por medio de objetivos externos (y si es necesario agregar nuevas reglas) como pedir a prolog que resuelva los
siguientes interrogantes:

Interrogante Goal externo en prolog
Que noble es un rufian?
Quien es susceptible de ser raptada por Romeo?
Quien puede raptar a Julieta?
Quien rapta a quien?
A quien desea Bartolo?
A quien desea Romeo?
Cual hermosa dama es deseada por Bartola?

123-Dadas las siguientes afirmaciones sobre el mximo comn divisor mcd de dos nmeros x, y, realizar un programa
en prolog que calcule el mcd
El mcd de un nmero y l mismo, es el mismo nmero
El mcd entre uno (1) y cualquier otro nmero es uno (1)
El mcd entre dos nmeros es igual al mcd entre el menor de los dos y la diferencia (el mayor menos el menor)
Por ejemplo el mcd entre 5 y 15 es igual al mcd entre 5 (el menor) y la diferencia que es 10 (15-5). El mcd entre 10 y 5
es igual al mcd entre 5 y la diferencia 5 (10-5). El mcd entre 5 y 5 es 5.
Por lo tanto el mcd entre 5 y 15 es 5.

2.9.1 Ejercicios de Prolog para procesamiento numrico
Prolog no fue diseado para realizar programas con alto contenido de procesamiento numrico, sin embargo soporta
este aspecto tanto como la recursividad y las operaciones aritmticas lo permiten. Estos ejercicios estn diseados para
explorar las capacidades de prolog respecto al procesamiento numrico, haciendo nfasis en la recursividad y que dado
que no existe la forma de definir funciones, se recurre al concepto de funcion como una relacion entre un elemento de
un dominio y la imagen que pertenece a un codominio. Es decir que una funcion es una relacion y por lo tanto se puede
tratar como un predicado.

124-Analizar y describir brevemente lo que hace el predicado fun
predicates
fun(Integer, Integer)
clauses
fun(Val,0):-Val>0, Val<5,!.
fun(Val,1):-Val<14,!.

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
26
fun(_,2)
125- El combinatorio n k esta definido como:
! )! (
!
k k n
n
k
n

= == =
| || |
| || |

| || |


\ \\ \
| || |
haga un programa en prolog que calcule el
combinatorio, utilizando un predicado que calcule el factorial de acuerdo a las siguientes reglas:



> >> >
= == =
= == =
0 1
0 1
n si n n
n si
n
)! (
!

126-Calcular una potencia aplicando las siguientes reglas: Cero a cualquier nmero diferente de cero da cero.
Cualquier entero diferente de cero elevado a la 0 da como resultado 1. Un nmero X elevado a la Y es igual a X
multiplicado por la potencia de X a la Y-1. Un nmero X diferente de cero elevado a un nmero negativo Y es igual a 1
sobre la potencia de X elevado a la Y

127-Hacer un programa en Prolog que reciba un entero n e indique si el nmero n es o no narcisista.
Un nmero narcisista es un Nmero de n dgitos que resulta ser igual a la suma de las potencias de orden n de sus
dgitos.
Ejemplo: 1 = 11
153 = 1 + 5 + 3.
9474 = 94 + 44 + 74 + 44

128-Hacer un programa en prolog que dado un nmero natural n encuentre su raz digital.
La raz digital de un natural n se obtiene calculando el natural m sumando los dgitos que componen al nmero n. El
proceso se repite sobre el nuevo nmero hasta que el resultado sea de un dgito.
Ejemplo: 347 3 + 4 + 7 = 14 1 + 4 = 5 RD(347) = 5
Nota: turbo prolog cuenta con los operadores div y mod que sirven para calcular la divisin entera y el residuo de
la divisin entera. Si es necesario haga uso de dichos operadores
Ejemplo: El predicado (5 div 3) =1 es verdadero y el predicado (15 mod 4) = 3 es verdadero

129- La funcin de Ackerman A, est definida para todos los valores enteros no negativos m y n de la siguiente forma:

> >
= >
= +
=
0 , 0 )) 1 , ( , 1 (
0 , 0 ) 1 , 1 (
0 1
) , (
n m si n m A m A
n m si m A
m si n
n m A
Hacer un programa en prolog que calcule la funcin Ackerman de cualquier par de enteros no negativos
2.9.2 Ejercicios de Listas en Prolog

130-Eliminar un nmero dentro de una lista de listas. Ejemplo si la lista original es [[1,2],[1,1,3,4],[1],[2,3,4]] y se
desea eliminar el 1, entonces la lista resultante ser: [[2],[3,4],[],[2,3,4]]

131-Dada una lista de enteros me diga el dato que se encuentra en una posicin dada... por ejemplo si la lista es
[2,1,6,4,9,7,5] y la posicin que quiero averiguar es la 3, entonces debe devolver el elemento en la posicin 3 que es 6.


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
27
132- Genere una lista con los n primeros trminos de la serie de fibonacci
1, 1, 2, 3, 5, 8, 12

133-Dada una lista de enteros, devover un par ordenado de dos listas de enteros, una con los pares y otra con los
impares
Ejemplo:
Si la lista entregada es [1,3,2,7,4,6]
La estructura resultante ser: parlista([1,3,7],[2,4,6])
Utilice los siguientes dominios
domains
num=integer
lista=num*
tpar=parlista(lista,lista)
Nota: turbo prolog cuenta con los operadores div y mod que sirven para calcular la divisin entera y el residuo de
la divisin entera. Si es necesario haga uso de dichos operadores
Ejemplo: El predicado (5 div 3) =1 es verdadero y el predicado (15 mod 4) = 3 es verdadero

134- Dada una lista de enteros, y un nmero entero k me devuelva una lista con los primeros k elementos de la lista
original. Ejemplo: Si la lista entregada es [1,3,2,7,4,6] y en nmero entero es 3, debe devolver la lista [1,3,2] que
corresponden a los primeros 3 elementos de la lista.

135-Dado un nmero entero N de cualquier cantidad de cifras, devuelver una lista cuyos elementos son cada uno de los
dgitos del nmero dado
Ejemplo:
Si el nmero es 132746 la lista devuelta es[1,3,2,7,4,6]
Nota: turbo prolog cuenta con los operadores div y mod que sirven para calcular la divisin entera y el residuo de
la divisin entera. Si es necesario haga uso de dichos operadores
Ejemplo: El predicado (5 div 3) =1 es verdadero y el predicado (15 mod 4) = 3 es verdadero

136-Una empresa enva sus mensajes codificados para que la competencia no los descubra. Haga un programa en
Prolog que reciba un texto (String) y genere una lista de caracteres con el texto codificado y con otro predicado reciba
una lista de caracteres (codificados) y devuelva otra lista de caracteres con el texto original.
El tipo de codificacin que utiliza la empresa para escribir sus mensajes consiste en sustituir las vocales por nmeros,
dejando los dems caracteres igual, de la siguiente forma:
a 1
e 2
i 3
o 4
u 5
Ejemplo: si el texto original es eucalipto
La lista de caracteres codificada es [2,5,c,1,l,3,p,t,4].
Y la lista de caracteres decodificado es [e,u,c,a,l,i,p,t,o]

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
28
Recuerde que en prolog existe un predicado predefinido llamado frontchar que extrae el primer carcter de una cadena
y funciona de la siguiente manera
Frontchar(Hola,X,Y)
X=H
Y=ola
Si necesita de este predicado haga uso de l. (solo en caso de creerlo necesario)

137-Dada una lista de reales y una lista de enteros, hallar una lista formada por las potencias cuya base es un elemento
de la primera lista y cuyo exponente es el elemento correspondiente de la segunda lista.
Ejemplo: el predicado potencias ( [ 1, 2.5,-3], [ 100, 2, -2], [1, 6.25, -0.111]) es verdadero

138- Hallar el promedio de los elementos de una lista de enteros, sin incluir el mayor ni el menor de la lista.

139- Extraer una seccin de una lista desde una posicin dada hasta otra
extraer ( [1,7,3,4,5,6], 2, 4 , X) respondera X=[7,3,4]

140- Eliminar los k primeros elementos de una lista Eliminar(3,[2,6,5,3,4,5,6],X) X=[3,4,5,6]

141- Sustituir un dato por otro dentro de una lista Sustituir (3,2,[4,3,3,3,4,5,6,2],Y) Y=[4,2,2,2,4,5,6,2]

142-Analizar cada uno de los siguientes predicados en el programa en prolog
domains
lista=integer*
predicates
esmiembro(integer,lista)
diferencia(lista,lista,lista)
union(lista,lista,lista)
interseccion(lista,lista,lista)
diferenciasimetrica(lista,lista,lista)
diferenciasimetricaxx(lista,lista,lista)
clauses
esmiembro(X,[X|_]):-!.
esmiembro(X,[_|Col]):-esmiembro(X,Col).
diferencia([],_,[]).
diferencia([X|Col],L,LR):-esmiembro(X,L),diferencia(Col,L,LR),!.
diferencia([X|Col],L,LR):-diferencia(Col,L,R),LR=[X|R].
union([],L,L).
union([X|Col],L,LR):-esmiembro(X,L),union(Col,L,LR),!.
union([X|Col],L,[X|LR]):-union(Col,L,LR).
interseccion([],_,[]).
interseccion([X|Col],L,LR):-esmiembro(X,L),interseccion(Col,L,A),LR=[X|A],!.

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
29
interseccion([_|Col],L,LR):-interseccion(Col,L,LR).
diferenciasimetrica([],L,L):-!.
diferenciasimetrica(A,B,C):-union(A,B,H),interseccion(A,B,K),diferencia(H,K,C).
diferenciasimetricaxx([],L,L):-!.
diferenciasimetricaxx(A,B,C):-diferencia(A,B,H),diferencia(B,A,K),union(H,K,C).

143-Nmero feliz: todo nmero natural que cumple la condicin de que si se suma los cuadrados de sus dgitos y se
sigue el mismo proceso con los resultados parciales hasta obtener un solo dgito... el resultado es 1. Por ejemplo, el
nmero 203 es un nmero feliz ya que
13 3 0 2
2 2 2
= + + el mismo proceso para el 13 es 10 3 1
2 2
= + , el mismo proceso para el 10 es,
1 0 1
2 2
= + ...... como el resultado es de un solo dgito ( en caso contrario seguir el proceso), se detiene el proceso
para este ejemplo (porque el resultado es de un solo dgito)
19 es feliz porque 12 + 92 = 82 el mismo proceso para 82 .... 82 + 22 =68 el mismo proceso para 68 62+82 = 100 el
mismo proceso para 100 12 + 02 + 02 = 1
aqu se presenta una posible solucin, desarrolle otra solucin diferente
domains
lista=integer*
predicates
feliz(integer)
sumacuadrados(integer,integer)
generar(integer,lista)
clauses
feliz(1):-!.
feliz(X):-sumacuadrados(X,1),!.
feliz(X):- sumacuadrados(X,Y),Y>9,feliz(Y),!.
sumacuadrados(X,Y):-X<10,Y=X*X,!.
sumacuadrados(X,Y):- D=X mod 10, Z=X div 10,Z>0,sumacuadrados(Z,H),Y=H+(D*D),!.
generar(1,[1]):-!.
generar(X,L):-feliz(X),Y=X-1,generar(Y,L1),L=[X|L1],!.
generar(X,L):- Y=X-1,generar(Y,L),!.

144-Insertar un elemento en una lista en una posicin determinada dentro de la lista. Al objetivo insertar( 0, [1,2,4] , 7 ,
X) responde X=[7,1,2,4]. Al objetivo insertar( 2, [1,2,4] , 7 , X) responde X=[1,2, 7,4]. Al objetivo insertar( 10,
[1,2,4] , 7 , X) responde X=[1,2,4,7]

145- Verificar si los elementos de una lista de lista estn en una lista sencilla.
contenido ( [[], [1,7] , [1,2] ], [7,2,3] ) Yes

146-Extraer una seccin de una lista desde una posicin dada hasta otra

147-Eliminar los elementos repetidos de una lista

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
30

148-Rotar los elementos de una lista, cierta cantidad de veces
rota(0 , [1,2,3,4] , [1,2,3,4])
rotar(1, [1,2,3] , [2,3,4,1])
rotar(2, [1,2,3,4] , [3,4,1,2])
2.10 Ejercicios con registros

149-Supongamos que representamos los puntos del plano mediante trminos (registros) de la forma punto(X,Y)
donde X e Y son nmeros reales, y los segmentos del plano mediante trminos de la forma segmento (P1,P2)
donde P1y P2 son los puntos extremos del segmento. Definir los predicados vertical(S) y horizontal(S), donde S es un
segmento, de tal manera que determinen si un segmento es vertical u horizontal respectivamente.
vertical ( segmento (punto(1,2) , punto(1,20) ) ) yes
horizontal( segmento (punto(1,2) , punto(1,20) ) ) No

150-Analizar el siguiente programa en prolog
domains
lista=symbol*
listalista=lista*
registro= datos(string,integer)
listota=registro*
predicates
mostrar(lista)
mostrar1(listalista)
mostrarlistota(listota)
clauses
mostrar([]):-!.
mostrar([X|Col]):-write(X,"\n"),mostrar(Col).
mostrar1([]):-!.
mostrar1([X|Col]):-mostrar(X),mostrar1(Col).
mostrarlistota([X|Col]):- X=datos(Y,_),write(Y),mostrarlistota(Col),fail.
mostrarlistota([]):- !.
goal
L=[ datos(juan,10),datos(pedro,12)],mostrarlistota(L).

151-Analizar las siguientes definiciones en prolog e implementar los predicados descritos
domains
numero=integer
listanumero=numero*
tpar=p(listanumero,listanumero)
listapares =tpar*

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
31
predicates
kesimo(integer,listapares,tpar)
/* kesimo(K, L, P) devuelve en P el K esimo elemento de la lista L
ejemplo de llamado kesimo(2,[p([1,2],[]), p([1,2],[1]), p([],[])],X)
respondera
X=p([1,2],[1])
1 solucion
*/
fusionarapartirde(numero,tpar,listanumero)
/*
fusionarapartirde(K,p(L1,L2),LR) inserta la lista L1 en la lista L2 a partir de la posicin K de L2 y devuelve el
resultado en LR
ejemplo de llamado fusionarapartirde(2, p([1,2,3],[9,8,6,7]), L)
responder
L=[9,8,1,2,3,6,7]
1 Solucion
*/

2.11 Ejercicios de bases de datos con prolog
Una base de datos es un conjunto de datos organizados de cierta manera que facilite el registro y recuperacin de la
informacin contenida en dicha base de datos. Normalmente asociamos el concepto de base de datos a las bases de
datos relacionales y a los motores que comnmente se usan en este tipo de base de datos, sin embargo el concepto de
base de datos es mucho mas amplio y en prolog tambin tiene su propia organizacin e interpretacin.
Una base de datos en prolog es un conjunto de datos organizados en forma de predicados (hechos) que se encuentra
almacenada en un archivo de texto. Para el almacenamiento y recuperacin de dicha informacin se hace uso de
algunos predicados predefinidos en prolog y que se listan a continuacin:
Save, consult, assert asserta, assertz, retract, retractall, findall, entre otros

152- Dado el siguiente programa en prolog
domains
persona = symbol
equipo = symbol
predicates
jugador(persona)
pertenece(persona,equipo)
tecnico(persona,equipo)
club(equipo)
clauses
tecnico(X,Y):- pertenece(X,Y),club(Y), not
(jugador(X)).
jugador(rene).
jugador(oscar).
Modificar este programa para realizar las siguientes actividades:
Mediante bases de datos internas crear un predicado llamado
guardardatos que dado el nombre de un archivo como
argumento, guarde todos los hechos de tipo jugador y club
dentro de un archivo de texto con el nombre del archivo dado en
el argumento.
Incluir un predicado que dado el nombre de un club, entregue
una lista con los nombres de los jugadores que pertenecen a ese
club.
Realizar un predicado llamado elimiarclub que elimine de la
memoria todos los hechos que estn relacionados con ese club
dado en el argumento.
Realizar un predicado llamado tranformaralista que dado un
string (cadena de caracteres) con los nombres de muchos
jugadores separados por espacio y que dicho predicado devuelva

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
32
jugador(freddy).
(*... y muchos mas hechos de este tipo*)
club(america).
club(nacional).
(*.... Y muchos mas hechos de este tipo ***)
pertenece(rene,nacional).
pertenece(oscar,america).
pertenece(wilmera,america).
(* y muchos ms hechos de este tipo)

una lista con los nombres de los jugadores

153- Dada el contenido del siguiente archivo de
texto equipos.txt:
equipo(Nacional)
equipo(America)
..... y muchos otro predicados de este tipo
jugador(Nacional,Pedro Antonio)
jugador(Nacional,Pepito Perez)
jugador(America,Juanito Jaimes)
jugador(Cucuta, Ronaldo Jaimes)
... y muchos otros predicados de este tipo
tcnico(Nacional,Jose Antonio)
... y muchos otros predicados de este tipo

Utilcelo dentro de un programa en prolog como base de datos,
para construir los siguientes predicados:
Un predicado que dado el nombre de un equipo devuelva una
lista con todos los jugadores del equipo
Un predicado que dado el nombre de un equipo elimine los
datos de todo lo relacionado con ese equipo y actualice el
archivo equipos.txt
Un predicado que dado el nombre de un equipo y una persona,
incluya a esa persona como jugador de ese equipo y actualice el
archivo equipos.txt
Finalmente construya un objetivo interno que cargue la base de
datos, que lea por teclado el nombre de un equipo y de un
jugador, incluya al jugador como miembro de ese equipo,
imprima la lista de jugadores de ese equipo, y finalmente
elimine los datos relacionados con ese equipo.

154-Dada el contenido del siguiente archivo de
texto informacion.txt:
materia(1,paradigmas,3,4)
materia(2,programacin,2,5)
....
estudiante(1,juanito)
estudiante(2,pepito)
....
nota(2006, 1, 1, 2, 3.5).
nota(2006, 2, 1, 1, 2.5).
nota(2006, 1, 2, 1, 3.5).
.
donde los anteriores predicados tienen la
siguiente estructura:
materia(codigomateria,nombremateria,
creditos, intensidadhoraria)
Utilice este archivo dentro de un programa en prolog como base
de datos, y construya los siguientes predicados:
Un predicado que dado el nombre de un estudiante, el ao y el
semestre, devuelva una lista con todas las materias (nombre de
materias) que esta cursando en ese semestre.
Un predicado que dado el nombre de un estudiante elimine de la
base de datos los predicados relacionados con ese estudiante y
actualice el archivo informacion.txt
Un predicado que dado el nombre de un estudiante, el ao y el
semestre calcule el promedio ponderado de dicho estudiante en
el semestre indicado por ao y semestre. Recuerde que el
promedio ponderado se calcula multiplicando la nota por el
nmero de crditos de la materia, sumando estos valores y
dividiendo entre el total de crditos.
Finalmente construya un objetivo interno que cargue la base de
datos, que lea por teclado el nombre de un estudiante, el ao y el
semestre, muestre la lista de materias que esta cursando en ese
ao y semestre, calcule el promedio ponderado del estudiante en

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
33
estudiante(codigoestudiante, nombreestudiante)
nota(ao, semestre, codigoestudiante,
codigomateria, calificacion)

ese semestre y finalmente elimine de la base de datos los
predicados relacionados con dicho estudiante.

155-Una compaa que vende gaseosas realiz una encuesta a cierto nmero de personas. En dicha encuesta se
pregunta lo siguiente:
Si el encuestado toma o no gaseosa.
Si toma, de qu marca prefiere la gaseosa.( 1=PepsiCola, 2=CocaCola 3=Otra marca)
Si toma, cuntas gaseosas toma en un da.
Se le pide que realice un programa en prolog que conteste lo siguiente:
Cuntos personas que no toman gaseosa fueron encuestados?
Cuntas personas toman Marca 1 y cuntos toman Marca 2?
Calcular el promedio por da de gaseosas de las personas que la consumen?
Los datos de la encuesta se encuentran almacenados en un archivo de texto llamado datos.txt el cual contiene hechos
de la forma respuesta (toma, marca, cuantas) donde:
Toma es un nmero entero 0 si no toma gaseosa el encuestado y 1 si toma.
Marca es un nmero entero que representa el cdigo de la marca. ( 1=PepsiCola, 2=CocaCola 3=Otra marca)
Cuantas es un nmero que representa el total de gaseosas que toma el encuestado en un da
As por ejemplo respuesta (0,0,0) representa el hecho de que la persona encuestada no toma gaseosa y un predicado
como respuesta (1,2,5) representa el hecho de que el encuestado si toma gaseosa, que prefiere la marca 2 y que
normalmente toma 5 gaseosas al da.
El programa en prolog debe hacer uso de base de datos y de objetivos internos.

156-Una empresa quiere un sistema de inventario en Prolog que almacena la informacin de los productos que la
empresa tiene en bodega en un archivo de texto llamado inventario.txt, donde la informacin de sus productos
corresponde a predicados que tienen la forma...... producto (cdigo, nombre, cantidad, valorunitario).
Donde
Cdigo en un nmero entero que representa el cdigo del producto
Nombre es un string que corresponde al nombre del producto
Cantidad es un entero que corresponde al nmero de artculos disponibles en bodega para ese producto
Y valorunitario corresponde al precio con el cual el producto es vendido al pblico.
Haga un programa en prolog que consulte la base de datos donde se encuentra la informacin de los productos y halle
el total de inventario en dinero. Haga uso de objetivos internos.

157-Se desea construir un programa en prolog con uso de bases de datos de tal manera que registre la informacin de
una biblioteca. Esta base de datos esta en un archivo llamado datos.txt y contiene predicados de la forma:
libro(id, autor, titulo)
ejemplar(idlibro, numinventario)
estudiante (codigo, nombre, apellido, prestamos)
donde prestamo es una lista de registros de la siguiente forma:
pres(numinventario, fechaprestamo, fechaentrega)
donde las fechas son registros de la forma

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
34
f(dia, mes, anio)

158- Hacer un programa en prolog que permita dentro de un objetivo interno, capturar por teclado un cdigo de
estudiante existente en la base de datos, un numero de inventario , una fecha actual y una fecha de entrega y registrar
en el archivo de la base de datos la informacin correspondiente al estudiante que realizo dicho prestamo.
2.12 Algunos predicados predefinidos en prolog
159- Estudiar cada uno de los siguientes predicados, explicar que hace el predicado, que significa cada uno de los
argumentos, en que estado pueden actuar estos argumentos Instanciados o libres, y un programa de ejemplo que use
dicho predicado
readln(StringVariable)
readint(IntgVariable)
readreal(RealVariable)
readchar(CharVariable)
file_str(DosFileName,StringVariable)
keypressed
readterm( Domain, Variable )
write( Variable|Constant * )
nl
cursor(Row,Column)
makewindow(WindowNo,ScrAtt,FrameAtt,Framestr,
Row,Column,Height,Width,
ClearWindow,FrameStrPos,BorderChars)
shiftwindow(WindowNo)
gotowindow(WindowNo)
resizewindow(StartRow,NoOfRows,StartCol,NoOfC
ols)
existwindow(WindowNo)
removewindow(WindowNo,Refresh)
clearwindow
frontchar(String,FrontChar,RestString)
fronttoken(String,Token,RestString)
concat(String1,String2,String3)
str_len(String,Length)
char_int(CharParam,IntgParam)
str_int(StringParam,IntgParam)
str_char(StringParam,CharParam)
str_real(StringParam,RealParam)
upper_lower(StringInUpperCase,StringInLowerCase)
upper_lower(CharInUpperCase,CharInLowerCase)
consult(DosFileName,InternalDatabaseName)
save(DosFileName,InternalDatabaseName)
assert( Term )
asserta( Term )
assertz( Term )
nondeterm retract( Term )
nondeterm retract( Term, InternalDbaseName )
retractall(Term)
retractall(_, InternalDbaseName )
edit(InputString,OutputString)
system(DosCommandString)
trap(PredicateCall,ExitCode,PredicateToCallOnError)
random(RealVariable)
random(MaxValue,RandomInt)
date(Year,Month,Day)
time(Hours,Minutes,Seconds,Hundredths)
trace(on/off)
findall( Variable, Atom, ListVariable )
not( Atom )
free( Variable )
bound( Variable )
fail
true (corte)



160- Dado el siguiente predicado en Prolog, analice el arbol de bsqueda definido y utilice el corte en diferentes puntos
del predicado, con el fin de observar las diferentes soluciones encontradas segn la ubicacin del corte.

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
35
p (X,Y):- a(X,Z), b(Z,W), c(W,Y),
p(x,y)
a(1,10) a(2,20) a(3,30)
b(10,5) b(10,7) b(10,4) b(20,1) b(20,7) b(30,7) b(30,0) b(30,5) b(30,2)
c(5,2) c(1,3) c(7,4)
c(7,2)
c(5,7)
a(X,Z)
b(Z,W)
c(W,Y)


domains
num=integer
predicates
p(num,num)
a(num,num)
c(num,num)
b(num,num)

clauses
a(1,10).
a(2,20).
a(3,30).
b(10,5).
b(10,7).
b(10,4).
b(20,1).

b(20,7).
b(30,7).
b(30,5).
b(30,0).
b(30,2).
c(5,2).
c(1,3).
c(7,4).
c(7,2).
c(5,7).
p(X,Y):-a(X,Z),b(Z,W),c(W,Y).

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
36

3 Paradigma de programacin Funcional
El paradigma funcional basa la descripcin de las computaciones en la evaluacin de funciones en la aplicacin de
funciones a valores conocidos. Por esta razn, los lenguajes funcionales tambin se les conocen en algunas ocasiones
como lenguajes aplicativos. Un lenguaje de programacin funcional tiene como mecanismo bsico la evaluacin de
una funcin o llamada de funcin. Esto involucra adems de la propia evaluacin de la funcin, la transferencia de
valores como parmetros a las funciones y la obtencin de valores resultantes como valores devueltos de las funciones.
El paradigma funcional no involucra una idea de variable o asignacin de variables. En cierto sentido, la programacin
funcional es lo opuesto a la progresin orientada a objetos: se concentra en los valores y las funciones en vez de en
localizaciones de memoria. Tambin las opresiones repetitivas no se expresan mediante ciclos, sino mediante funciones
recursivas.

161-Defina cada uno de los siguientes conceptos:
Conjunto
Operacin entre conjuntos
Producto cartesiano de conjuntos
Relaciones entre conjuntos
Funcin

162- Identifique el demonio de las siguientes funciones
sgn x | x == 0 = 0
| x < 0 = -1
| otherwise = 1

mcd :: Int -> Int -> Int
mcd n 0 = n
mcd n m = mcd m (mod n m)

fact :: Integer -> Integer
fact 0 = 1
fact n = n * fact (n-1)

3.1 Ejercicios de programacin con Haskell
163-Hacer un programa en Haskell que encuentre las soluciones reales a una ecuacin cuadrtica de la forma
0
2
= + + c bx ax recordando que dicha ecuacin tiene dos soluciones reales (si las tiene) de la forma
a
ac b b
x
2
4
2

=
Se presentan aqu dos posibles soluciones, buscar otra
raices :: (Float,Float,Float)->(Float,Float)
raices (a,b,c) = (x1,x2)
raices' :: (Float,Float,Float)->(Float,Float)
raices' (a,b,c) = let

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
37
where
d=(b*b)-(4*a*c)
r=sqrt(d)
x1=(-b+r)/(2*a)
x2=(-b-r)/(2*a)

d=(b*b)-(4*a*c)
r=sqrt(d)
x1=(-b+r)/(2*a)
x2=(-b-r)/(2*a)
in (x1,x2)

164- Hacer una funcin en Haskell que reciba un entero n y devuelva un valor de verdad que indique si el nmero n es
o no narcisista.
Un nmero narcisista es un Nmero de n dgitos que resulta ser igual a la suma de las potencias de orden n de sus
dgitos.
Ejemplo: 1 = 11
153 = 1 + 5 + 3.
9474 = 94 + 44 + 74 + 44

Aqu una solucin, para estudiar...Proponga otra solucin diferente
descomponer ::Int -> [Int]
descomponer x = if x<10 then
[x]
else
let
y= div x 10
in
(mod x 10 : descomponer y)

potencia :: (Int,Int) -> Int
potencia (_,0) = 1
potencia (x,y) = x * potencia (x,y-1)

potencialista:: Int -> [Int] -> [Int]
potencialista _ [] =[]
potencialista n (x:c)= potencia (x,n): potencialista n c

narcisista :: Int -> Bool
narcisista x = let
l1 = descomponer x
n = length l1
suma= sum (potencialista n l1)
in
x==suma



3.2 Ejercicios de listas en Haskell
165- Realice un programa en Haskell que dada dos listas cualquier cosa (int,char,listas, etc), me devuelva una lista con
los elementos que estn en la primera lista pero que no estn en la segunda listas y los elementos que estn en la
segunda lista pero que no estn en la primera. Es decir los no comunes.
Por ejemplo si la primera lista es [1,2,3,4,5,8] y la segunda lista es [7,3,5,8,9] el resultado es [1,2,4,7,9]


Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
38
166-Hacer un programa en Haskell que dada una lista de enteros, me devuelva un par ordenado de dos listas de enteros,
una con los pares y otra con los impares
Ejemplo:
Clasificar [1,3,2,7,4,6]
Da como resultado ([1,3,7],[2,4,6])
Aqu se presentan tres soluciones diferentes para este programa
clasificar::[Int]->([Int],[Int])
clasificar []=([],[])
clasificar (x:c) = if (even x) then
((x:l1),l2)
else
(l1,x:l2)
where
(l1,l2) =
clasificar c

clasifi ::[Int]->([Int],[Int])
clasifi []=([],[])
clasifi (x:c) = let
(p1,p2) = clasifi c
in
if (even x) then
(x:p1,p2)
else
(p1,x:p2)

par::[Int] -> [Int]
par []=[]
par (x:c) = if (even x) then
x:par c
else
par c

impar::[Int] -> [Int]
impar []=[]
impar (x:c) = if (odd x) then
x:impar c
else
impar c

clas ::[Int]->([Int],[Int])
clas lista= (par lista, impar lista)

167-Hacer un programa en haskell que dado una lista de enteros me devuelva una lista con los das que corresponden a
cada uno de los enteros de la lista. Ejemplo
Traducir [1,4,7]
Da como resultado [domingo,miercoles,sabado]

168-Hacer un programa en Haskell que halle el promedio de los elementos de una lista de enteros.

169-Hacer un programa en Haskell para eliminar un nmero dentro de una lista de listas.
Ejemplo si la lista original es [[1,2],[1,1,3,4],[1],[2,3,4]] y se desea eliminar el 1, entonces la lista resultante ser:
[[2],[3,4],[],[2,3,4]]

170-Hacer un programa en Haskell que dada una lista de cualquier tipo de datos diga el dato que se encuentra en una
posicin dada... por ejemplo si la lista es [2,1,6,4,9,7,5] y la posicin que quiero averiguar es la 3, entonces debe
devolver el elemento en la posicin 3 que es 6.

171-Dadas las siguientes afirmaciones sobre el mximo comn divisor mcd de dos nmeros x, y:
El mcd de un nmero y l mismo, es el mismo nmero
El mcd entre uno (1) y cualquier otro nmero es uno (1)
El mcd entre dos nmeros es igual al mcd entre el menor de los dos y la diferencia (el mayor menos el menor)

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
39
Por ejemplo el mcd entre 5 y 15 es igual al mcd entre 5 (el menor) y la diferencia que es 10 (15-5). El mcd entre 10 y 5
es igual al mcd entre 5 y la diferencia 5 (10-5). El mcd entre 5 y 5 es 5.
Por lo tanto el mcd entre 5 y 15 es 5.
Haga un programa en haskell que dada una lista de pares (x,y) de enteros, devuelva una lista de listas, cada lista interna
llevar tres elementos, los dos elementos de cada par y le mcd entre esos dos elmentos; como muestra el siguiente
ejemplo:
Dada la lista de pares [(5,15),(8,20),(7,13),(15,5)] debe devolver [ [5,15,5], [8,20,4], [7,13,1], [ 15,5,1] ]

172-Haga un programa en haskell que dada tres listas del mismo tamao, devuelva una lista de tripletas as:
Si las tres listas son [1,2,5,8] [7,4,2,4] [5,2,1,5]
La lista de tripletas resultante es: [ (1,7,5) , (2,4,2), (5,2,1), (8,4,5) ]

173-Se dice que un nmero N es nmero perfecto si la suma de sus divisores propios es igual a l mismo.
El conjunto de divisores propios de un nmero N, est formado por todos sus divisores, Excepto l mismo. Ejs, los
divisores propios de 9 son 1 y 3. Los divisores propios de 6 son 1,2 y 3.
Por lo tanto 6 es un nmero perfecto porque la suma de sus divisores propios 1 + 2 +3 es igual a l mismo (a 6). Y 9
no es perfecto
Hacer un programa en Haskell que dado un nmero entero positivo N, diga si es o no perfecto

174-Se tiene un conjunto de n parejas de datos Xi, Yi donde cada pareja representa las coordenadas del punto i de un
polgono irregular de n lados. Suponga que las coordenadas se proporcionarn en orden adyacente. Elabore un
programa en haskell que dada dos listas de reales de igual tamao, que representan las coordenadas Xi, Yi de los
vrtices de un polgono irregular, devuelva el rea del polgono. El rea del polgono irregular se puede calcular
utilizando la siguiente frmula:
Area = [(X0+X1)*(Y0-Y1 ) + (X1+X2)*(Y1-Y2)+. . .+ (Xn-1+X0)*(Yn-1-Y0)] ]] ] / 2
Suponga que los Xi ,Yi son reales y el polgono est determinado por cualquier nmero de puntos

175-Construya un programa en haskell que dada dos listas que representan conjuntos, devuelva un valor de verdad que
diga si el primer conjunto (lista) est contenido en el segundo conjunto (lista)
Ejemplo
Si las listas son [1,2,3,4 ] [3,4,5,6] la respuesta es false
Si las listas son [1,2,3,4 ] [8,1,3,2,4,5,6] la respuestas es true
Si las listas son [ ] [8,1,3,2,4,5,6] la respuestas es true
Si las listas son [8,1,3,2,4,5,6] [1,2,3,4 ] la respuestas es false

176- Supngase que se quiere un programa en haskell que ayude al procesamiento estadstico bsico de un conjunto de
datos numricos
Realice las funciones que considere necesarias para
Hallar la media de una lista de datos
Encontrar la moda de los datos (el dato que ms se repite)

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
40
Hallar la desviacin estndar dada por la siguiente formula
n
x x
a
n
i
i
=

=
1
2
) (
donde
_
x es la media de los
datos
Hallar una distribucin de frecuencia en la que dada una lista intervalos es decir de pares (x , y), devuelva un lista de
enteros con la cantidad de datos tales que x<= dato < y
Ejemplo
Si el conjunto de datos est representado por [2,3,4,4,3,4,4,1,2]
La media es 3
La desviacin estndar es 1.05409
La moda es 4
Y para la distribucin de frecuencia si la lista de intervalos (pares de nmeros) es
[ ( 0 , 2 ) , ( 2, 4 ) , ( 4 , 6 ) , ( 6 , 8 ) ] la lista devuelta estar formada por el conto de datos en cada uno de los
intervalos as [ 1, 4 , 4, 0 ]

177-Hacer un programa en Haskell que dado un nmero natural n encuentre su raz digital.
La raz digital de un natural n se obtiene calculando el natural m sumando los dgitos que componen al nmero n. El
proceso se repite sobre el nuevo nmero hasta que el resultado sea de un dgito.
Ejemplo: 347 3 + 4 + 7 = 14 1 + 4 = 5 RD(347) = 5
Nota: Haskell cuenta con las funciones div y mod que sirven para calcular la divisin entera y el residuo de la
divisin entera. Si es necesario haga uso de dichas funciones que tambin pueden usarse como operadores utilizndolos
entre comillas sencillas.
Ejemplo: el llamado a la funcin (5 div 3) retorna 1 y el llamado a la funcin (15 mod 4) retorna 3

178-Hacer un programa en Haskell que dado una lista de nmero enteros positivos, devuelva una lista con las races
digitales de dichos nmeros
raices [345, 103, 23 7,28]
[5, 4, 5, 7,1]

179-Haga un programa en haskell que dada una lista de ternas, devuelva una terna de listas as:
Si la lista de tripletas es: [ (1,5,7) , (2,2,4), (1,2,5), (4,5,8) ]
La tripleta de listas resultante es ( [1,2,1,4] , [5,2,2,5] , [7,4,5,8] ) cada lista de esta tripleta esta formada por los
primeros, los segundos y los terceros elementos respectivamente de las tripletas de la primera lista.

180-Construya un programa en haskell que dada una lista de listas, devuelva una lista de pares compuestos por el
menor y el mayor de los elementos de cada una de las listas as:
mayormenor [ [2,1,3,4 ] , [6, 4,3,5] , [ ] , [1,1,1,1] ]
[ (1,4) , (3,6) , (0,0) , (1,1) ]

181-Realizar un programa en Haskell que permita insertar un elemento de cualquier tipo en una posicin determinada
de una lista de objetos de mismo tipo de elemento a insertar. Por ejemplo:

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
41
insertar (pos, lista,elemento)
El llamado a la funcin insertar ( 0, [1,2,4] , 7) devuelve [7,1,2,4].
Insertar ( 2, [ [1,2], [ ], [4] ] , [7,3] ) devuelve [ [1,2], [ ], [7,3] , [4] ] .
Insertar ( 10, [ (1,2), (3,4), (7,9) ] , (71,2) ) devuelve [ (1,2), (3,4), (7,9) , (71,2) ]

182-Realizar un programa en Haskell que permita verificar si los elementos de una lista de lista de enteros, estn en
una lista sencilla de enteros.
Contenido(listadelistas, listasencilla)
contenido ( [ [ ], [1,7] , [1,2] ], [7,2,3] ) retorna true

183-Extraer una seccin de una lista de cualquier cosa, desde una posicin dada hasta otra
extraer(posinicial, posfinal, lista)
El llamado a la funcin extraer ( 0, 3 , [1,2,4,5,6,3,6,4,2] ) devuelve [1,2,4,5].
El llamado a la funcin extraer ( 3, 5 , [1,2,4,5,6,3,6,4,2] ) devuelve [5,6].
Extraer ( 2, 2, [ [1,2], [ ], [4], [2,3,4], [ ] ] ) devuelve [ [ 4 ] ] .
Insertar ( 3 , 20, [ (1,2), (3,4), (7,9) , (71,2), (7,2) ] ) devuelve [(71,2), (7,2) ]

184-Dada una lista de listas de enteros sustituya las listas que terminen en un nmero dado; por la lista vaca. Por
ejemplo en el llamado
Sustituir ( 3 , [ [1,2,5] , [3] , [ ] , [6,7,3,4] , [4,3] ] ) devuelve la lista de listas [ [1,2,5] , [ ] , [ ] , [6,7,3,4] , [ ] ]

185- Dada una lista de enteros, armar una lista de pares tomando en orden de a dos elementos asi:
armar [1,2,3,4,5,6,7,8]
retorna [(1,2), (3,4), (5,6), (7,8)]
Si el nmero de elementos de la lista inicial es impar, debe ignorar el ltimo elemento
armar [1,2,3,4,5,6,7,8,9]
retorna [(1,2), (3,4), (5,6), (7,8)]

186-Eliminar los elementos repetidos de una lista de cualquier cosa.
Eliminar(lista)

187-Dado el siguiente cdigo:
type complejo = (Float, Float)
type solucion=(complejo, complejo)
Donde complejo representa un numero imaginario, es decir el complejo (w,z) representa el imaginario wi +z donde w
(parte imaginaria) y z(parte real) son nmeros reales y donde i es 1 , cuando w=0 el nmero corresponde a un
nmero real es decir que el coeficiente de la parte imaginaria es cero.
Hacer un programa en haskell que encuentre la solucin a una ecuacin cuadrtica 0
2
= + + c bx ax
Recuerde que las soluciones estn dadas por la ecuacin cuadrtica
a
ac b b
x
2
4
2

=

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
42
Si el discriminante ac b 4
2
es un nmero positivo, entonces las dos soluciones son nmeros reales y por lo tanto la
solucin a la ecuacin tiene la forma ((0 , x1) , (0 , x2))
Si el discriminante es negativo entonces la ecuacin tiene dos soluciones imaginarias de la forma
|
|

\
|
|
|

\
|

|
|

\
|

a
b
a
ac b
a
b
a
ac b
2
,
2
) 4 (
,
2
,
2
) 4 (
2 2


188-Dado el siguiente fragmento de codigo en haskell sobre informacion de una biblioteca.
type Usuario = String
type Libro = String
type Prestamos = [(Usuario,Libro,Fecha)]
type Fecha = (Int,Int,Int)

Hacer las siguientes funciones
Una funcin que dado dos fechas retorne verdadero si la primera fecha es anterior a la segunda

Una funcin que dada una lista de tipo Prestamos, retorne el numero de libros cuya fecha de prstamo es anterior a una
fecha dada

189- Para cada una de las siguientes funciones definidas en Haskell, escriba como est definida la funcin (por ejemplo
f::[Int]->Int), y que hace la funcin. Para cada uno de los ejercicios mostrar un ejemplo de llamado a la funcin y
resultado del llamado.
sum2elem (x:y:_) = x+y
elim2 (x:_:t) = x:t
t [x,y] = x+y
t l = sum2elem (elim2 l)
4. elimkprim 0 l = l
elimkprim k (x:t) = elimkprim (k-1) t
5. kprim 0 _ = []
kprim k (x:t) = x : (kprim (k-1) t)
6. sust x y (h:t) = if (x==h)
then
y:(sust x y t)
else
h:(sust x y t)
7. quitarrep [] = []
quitarrep (h:t) = if (elem h t)
then
quitarrep t
else
h : (quitarrep t)
8. nsimo 1 (h:_) = h

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
43
nsimo n (_:t) = nsimo (n-1) t
9. pares n = n : pares (n+2)
10. trenzar ((x:r):t) = x : trenzar (t ++ [r])
trenzar ([]:t) = trenzar t
trenzar [] = []

190-Analice el siguiente programa y practique diversos llamados a las funciones all definidas
module Cambiodemoneda where
type Precio= (Moneda,Float)
data Moneda = Euro | Peseta | Lira | Marco | Franco | Florin | Escudo | Dolar | Yen | Libra
deriving Show
unEuro :: Moneda -> Float
unEuro Euro = 1.0
unEuro Peseta = 166.386
unEuro Lira = 1936.27
unEuro Marco = 1.95583
unEuro Franco = 6.55957
unEuro Florin = 2.20371
unEuro Escudo = 200.48
unEuro Dolar = 0.885
unEuro Yen = 111.360
unEuro Libra = 0.621
cambio :: Precio -> Moneda -> Precio
cambio (m,x) nueva = (nueva, (unEuro nueva) * (x / (unEuro m) ) )
suma :: Moneda -> Precio -> Precio -> Precio
suma m p1 p2 = let
(a,b) = cambio p1 m
(c,d) = cambio p2 m
in
(m,b+d)
Cambie el tipo de datos Moneda por las siguientes monedas: Peso, Bolivar, Dlar, Euro, Sol, donde la moneda
fundamental (base) sea el Peso

Pruebe el llamado a las anteriores modificaciones as:
unPeso Euro
unPeso Dlar
unPeso Bolivar
cambio Bolivar (Peso,5000)
cambio Euro (Peso, 50000)
cambio Peso (Euro, unPeso Euro)
suma Pesos (Euro,100) (Bolivar 5000)

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
44
suma Pesos (Euro,100) (Bolivar 5000)
suma Dlar (Euro,10) (Dlar,10)

191-Dado el siguiente programa en Haskell, definir que hace, como funciona y probar con diferentes llamados desde el
prompt, analizando las salidas obtenidas. Para ello es importante conocer algunas funciones y operadores predefinidos
en el prelude como: div, mod, ++, !!
module Cambiodebase where
aBase :: Int -> Int -> [Int]
aBase b n = if (n<b)
then [n]
else (aBase b (div n b)) ++ [mod n b]
lista :: String
lista = "0123456789ABCDEFGHIJKLMNOPQRSTUVXYZ@#&"
aStr (h:t) = (lista !! h): (aStr t)
aStr [] = []
aStr (c:col)= chr c : aStr col
aB :: Int -> Int -> String
aB b n = aStr (aBase b n)
192-Estudie el siguiente programa en haskell, recordando que el tipo de datos a en las expresiones, representan tipos
polimorficos, luego pueden ser listas, nmeros, caracteres, tuplas, etc.
type Bolsa a = [(a,Int)]
vacia :: Bolsa a -> Bool -- o bien: vacia :: [(a,Int)] -> Bool
vacia [] = True
vacia _ = False

anadir :: (Eq a) => a -> Bolsa a -> Bolsa a
anadir x [] = [(x,1)]
anadir x ((y,n):t) = if (x==y) then (y,n+1):t
else (y,n) : (anadir x t)
anadir2 :: (Eq a) => (a,Int) -> Bolsa a -> Bolsa a
anadir2 p [] = [p]
anadir2 (z,m) ((y,n):t) = if (z==y) then (y,n+m):t
else (y,n) : (anadir2 (z,m) t)
unir :: (Eq a) => Bolsa a -> Bolsa a -> Bolsa a
unir (h:t) b = unir t (anadir2 h b) -- o bien anadir2 h (unir t b)
unir [] b = b

Probar el anterior programa con llamados como los siguientes y analizar el resultado
---en estos llamados la a representa nmeros enteros
anadir 3 []
anadir 5 (anadir 3 [])
anadir 3 (anadir 2(anadir 3 (anadir 5 (anadir 3 []))))

Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------02-2011----------
45

---en estos dos llamados la a representa una lista de enteros
anadir [1,2] [([],1)]
anadir [1,2] (anadir [1,2] [([],1)])

- -Realice llamados para cuando la a este representando tuplas de dos elementos como por ejemplo (2,3) (pares
ordenados)
- -Realice pruebas de llamados a las funciones anadir2 y unir
3.3 Funciones predefinidas
Estudiar y practicar los siguientes operadores y algunas funciones predefinidas en el prelude de Hugs (Haskell)
(&&) :: Bool -> Bool ->Bool - - and lgico
(||) :: Bool -> Bool ->Bool - - or lgico
not :: Bool -> Bool
(**):: a -> a -> a - - potencia de enteros
(++):: [a] ->[a]->[a] - - concatena dos listas
abs:: a->a
sin:: a->a
cos:: a->a
tan:: a->a
pi:: a
concat::[[a]]->[a]
div:: a ->a->a -- ---- se puede usar asi: div 5 2 o bien 5
`div`2
mod:: a ->a->a
divMod:: a ->a ->(a,a)
chr :: Int -> Char
take :: Int ->[a] ->[a]
sum :: [a]->a
elem :: a->[a]->Bool
even ::a -> Bool
odd ::a -> Bool
head::[a]->a
last::[a]->a
tail ::[a]->[a]
isDigit :: Char-> Bool
length :: [a]->Int
maximum :: [a]->a
minimum :: [a]->a
reverse::[a]->[a]
Funciones de orden superior

all:: (a->Bool) -> [a] ->Bool
any :: (a->Bool) -> [a] ->Bool
takeWhile (a->Bool) ->[a] -> [a]
map :: (a->b) ->[a]->[b]
break :: (a -> Bool) -> [a] -> ([a],[a])
span :: (a -> Bool) -> [a] -> ([a],[a])

Você também pode gostar