Académique Documents
Professionnel Documents
Culture Documents
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
1.7
GENERALIDADES DE LOS PARADIGMAS DE PROGRAMACIN DE COMPUTADORES ................................................................ 4
FUNCIONES .......................................................................................................................................................................... 5
COMPOSICIN DE FUNCIONES .............................................................................................................................................. 7
NOTACIN LAMBDA ............................................................................................................................................................ 8
UN LENGUAJE FUNCIONAL (HASKELL) ................................................................................................................................ 8
EJERCICIOS DE PROGRAMACIN CON HASKELL ................................................................................................................. 10
EJERCICIOS DE LISTAS EN HASKELL................................................................................................................................... 11
FUNCIONES PREDEFINIDAS................................................................................................................................................. 22
Universidad de Pamplona
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.
Universidad de Pamplona
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
Universidad de Pamplona
[105]
Definicin
de
Paradigma,
cecte.ilce.edu.mx/blogmcyte/files/mnegrete1110_GLOSARIO.doc
software.adslzone.net/glosario/p-q-y-r/
[106] definicin de paradigma software.adslzone.net/glosario/p-q-y-r/
Universidad de Pamplona
2.1 Funciones
El concepto de funcin parte del concepto de relacin que a su vez parte del producto cartesiano de dos conjuntos, sin
embargo se presentan dificultades al utilizar conjuntos diferentes a los conjuntos numricos tpicos como enteros,
racionales o reales y se hace difcil el uso de conjuntos como tuplas, matrices, vectores, etc.
Otro aspecto de importancia es la notacin de la funcin, es decir cuando se define f(x)=2x +1, se puede interpretar f(x)
como un nmero entero imagen de x (el nmero 2x+1) o como la funcin f que a su vez es una relacin es decir un
subconjunto del producto cartesiano de dos conjuntos, es decir que f es un conjunto de la forma f={ (x,y) / xZ
y=2x+1}
Estas ambigedades hacen que en programacin funcional se necesite generalizar el concepto de funcin y se ha
optado por interpretar una funcin como el procesamiento de datos de entrada que produce datos de salida.
f
x
2x+1
2x+1
As pues, la funcin se puede interpretar como una mquina que recibe objetos (pertenecientes a un determinado
conjunto) los procesa de alguna forma y devuelve (retorna) objetos pertenecientes a otro conjunto.
Todos los posibles objetos que puede procesar una funcin conforman el dominio de la funcin y todos los posibles
objetos procesados y retornados por una funcin conformar el rango de la funcin. De esta manera se puede notar la
funcin as:
f :: Dominio Rango
Universidad de Pamplona
a1,1
y a2 ,1
an ,1
aik Z
a1, n
a2, n
an, n
a1,i
a2 ,i
a n ,i
x R
a1,1
x a2,1
an,1
a1,i
a 2 ,i
a n ,i
a1, n
a2 ,n
an , n
[ x] 2
En este grfico la funcin g recibe dos objetos una matriz cuadrada de enteros y un nmero real y retorna una matriz
cuadrada de reales, multiplicado el real x por la matriz de enteros y.
Aunque pareciese que la funcin recibe dos objetos, esto se puede ver como un par ordenado cuya primera componente
es una matriz y su segunda componente es un nmero real.
De igual manera la salida pude aparentar devolver varios datos( lo que contradice el concepto de funcin) sin embargo
la salida tambin puede verse como un solo objeto en forma de tupla cuya primera componente es una matriz cuadrada
de reales y su segunda componente un entero formado por la parte entera de x restando 2.
As por lo tanto la funcin g puede definirse as:
g:: (Znxn x R ) (Rnxn x Z )
( m , x ) ( xm, [x]-2 )
Universidad de Pamplona
Donde (Znxn x R ) es el producto cartesiano de las matrices cuadradas de enteros por los reales, (Rnxn x Z ) es el
producto cartesiano de las matrices cuadradas de reales por los enteros, xm es el producto de un real por una matriz y
[x] es la parte entera de x.
Los principales problemas que presentan los estudiantes en esta tema, radican en identificar la forma de los objetos que
pertenecen al dominio o al rango de una funcin.
a1,1
x a2,1
an ,1
aik Z
a1,i
a 2, i
an ,i
a1, n
a2 , n
an , n
f
n
y aik
i 1 k 1
(y , y-0.1)
En el cual las funciones f y g estn definidas por
f :: Znxn Z
g :: Z ZxR
Por lo tanto la composicin de funciones f g est definida como:
Universidad de Pamplona
f g :: Znxn ZxR
a1,1
a 2,1
a n,1
a1,i
a 2,i
a n ,i
a1,n
n n
a 2,n aik
i 1 k 1
an ,n
n
n
, ( aik ) 0.1
i 1 k 1
Las principales dificultades de los estudiantes estn en hacer compatible el rango de la primera funcin con el dominio
de la segunda funcin, dado que esto es requisito para poder hacer la composicin.
Universidad de Pamplona
De igual manera se pueden definir nuevos dominios a partir de dominios existentes, con ello se puede calcular las
raices imaginarias. Siendo necesario definir los nuevos dominios como siguie
type complejo = (Float, Float)
type solucion=(complejo, complejo)
Donde complejo representa un nmero 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.
Se puede construir un programa en haskell que encuentre la solucin a una ecuacin cuadrtica
b b 2 4ac
2a
Si el discriminante b 2 4ac 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
(b 2 4ac) b (b 2 4ac) b
,
La solucin en haskell corresponde a:
,
,
2a
2a
2a
2a
Universidad de Pamplona
10
b b 2 4ac
2a
raices' :: (Float,Float,Float)->(Float,Float)
raices' (a,b,c) = let
d=(b*b)-(4*a*c)
r=sqrt(d)
x1=(-b+r)/(2*a)
x2=(-b-r)/(2*a)
in (x1,x2)
4-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
Universidad de Pamplona
11
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
5-Hacer un programa que calcule un combinatorio segn la siguiente definicin recursiva:
n n
1
0 n
n n 1 n 1
k k k 1
6-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)
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.
Hacer una funcin que calcule el mximo comn divisor entre dos enteros positivos.
7- 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
8- 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
Universidad de Pamplona
12
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]
12-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)
13-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]
14-Hacer un programa en Haskell que dada una lista de enteros, devuelva 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.
15-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) ]
16-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
Universidad de Pamplona
13
17-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
18-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
19- Hacer un programa en Haskell que calcule los kprimeros trminos de la siguiente serie, retornndolos en una lista:
1, 4, 2, 8, 4, 16, 8, ...... Determinada por:
a1=1
a2= 22 / a1 = 4
a3= 23 / a2 = 2
a4 = 24 / a3 = 8
.....
ak= 2k / ak-1
Al llamado kelementos 7 responder [1,4,2,8,4,16,8]
20-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]]
21- Hacer un programa en Haskell que dada una lista de listas de enteros, retorne una lista de listas sin los elementos
repetidos.
Al llamado eliminarrepetidos [ [1,2,3] , [1,2] , [6,3,8], [2,1], [6,3,8] , [1,2], [3,4], [8,6,3], [8,6] ]
retorna [ [1,2,3] , [1,2], [3,4], [8,6,3], [8,6] ]
Recordar que para este caso dos listas de entero se consideran iguales si tienen los mismos elementos sin importar el
orden.
22- 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
14
(x
a
x) 2
i 1
n
Hallar la desviacin estndar dada por la siguiente formula
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 ]
23-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]
24-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)
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] ]
25-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.
26-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) ]
Universidad de Pamplona
15
27-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:
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) ]
28-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
29-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 ( 1, 3 , [1,2,4,5,6,3,6,4,2] ) devuelve [1,2,4].
El llamado a la funcin extraer ( 3, 5 , [1,2,4,5,6,3,6,4,2] ) devuelve [4,5,6].
Extraer ( 3, 3, [ [1,2], [ ], [4], [2,3,4], [ ] ] ) devuelve [ [ 4 ] ] .
Extraer ( 3 ,20, [ (1,2), (3,4), (7,9) , (71,2), (7,2) ] ) devuelve [(7,9) , (71,2), (7,2)]
30-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] , [ ] ]
31- 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)]
32-Eliminar los elementos repetidos de una lista de cualquier cosa.
Eliminar(lista)
33-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
nmero real es decir que el coeficiente de la parte imaginaria es cero.
Universidad de Pamplona
16
b b 2 4ac
2a
Si el discriminante b 2 4ac 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
(b 2 4ac) b (b 2 4ac) b
,
,
2a
2a
2a
2a
Universidad de Pamplona
17
else
h : (quitarrep t)
8. nsimo 1 (h:_) = h
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 []
= []
36-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)
Universidad de Pamplona
18
Universidad de Pamplona
19
anadir 3 []
anadir 5 (anadir 3 [])
anadir 3 (anadir 2(anadir 3 (anadir 5 (anadir 3 []))))
---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
39- Hacer un programa en Haskell que dada una lista de listas de enteros, retorne una lista de listas sin los elementos
repetidos.
Al llamado erepetidos [ [1,2,3] , [1,2] , [6,3,8], [2,1], [6,3,8] , [1,2], [3,4], [8,6,3], [8,6] ]
retorna [ [1,2,3] , [1,2], [3,4], [8,6,3], [8,6] ]
Recordar que dos listas de entero se consideran iguales si tienen los mismos elementos sin importar el orden.
Analice el siguiente codigo y escriba otro programa diferente
erepetidos::[[Int]]->[[Int]]
erepetidos [] = []
erepetidos (c:col) = if esta c col then
erepetidos col
else
c:erepetidos col
esta:: [Int]-> [[Int]] -> Bool
esta _ []
= False
esta x (c:col) = if igual x c then
True
else
esta x col
igual:: [Int]->[Int]->Bool
igual x y = (contenida x y) && (contenida y x)
contenida:: [Int]->[Int]->Bool
contenida []
_ = True
contenida (c:col) x = (elem c x) && (contenida col x)
40-Hacer un programa en Haskell que dadas dos listas de cualquier cosa que representan conjuntos, halle el producto
cartesiano de dichos conjuntos, es decir que retorna una lista de pares donde las primeras componentes son elementos
del primer conjunto y las segundas componentes son elementos del segundo conjunto.
Al llamado pcartesiano [2,3,4] [1,8]
Retorna [ (2,1), (2,8), (3,1), (3,8) , (4,1), (4,8) ]
Analice el siguiente codigo y escriba otro programa diferente
Universidad de Pamplona
20
Universidad de Pamplona
21
Quick Sort: Algoritmo que utiliza la tcnica divide y vencers, es uno de los algoritmos ms conocidos y eficientes
por su rapidez. Consiste en tomar un elemento pibote y a partir de l generar 2 sublistas una de los menores y una de
los mayores a l. Y con cada una de estas sublistas hacer lo mismo, es decir es un algoritmo recursivo.
quickSort::Ord a=>[a]->[a]
quickSort [] = []
quickSort (x:xs) = quickSort(menores) ++ [x] ++ quickSort(mayores)
where
menores = [y | y <-xs, y < x]
mayores = [z | z <-xs, z >= x]
de tal manera que al llamado quickSort ['p','d','g','r','h','s','x','w','l','i','t','y','a','z','e'] responder
adeghilprstwxyz
En este caso se tomo a p (cabeza de la lista) como nuestro pibote y se crean 2 sublistas una de los menores de p y
otra de sus mayores e se llama a la funcin recursivamente para que hagan la misma operacin con estas sublistas.
Cuando se ha dividido hasta ms no poder, entonces se empieza a concatenar los elementos menores con su pibote y
con los mayores.
Merge Sort: Este tambin es un algoritmo que usa la tcnica dividde y vencers.Consiste en dividir la lista en 2 listas,
ordenar estas listas aparte y luego mezclar el resultado de las 2 ordenaciones obteniendo as una nueva lista ordenada.
Lo primeros que se hace es crear una funcin que concatener 2 listas ordenadas y el resultado tambin sea ordenado:
merge::Ord a =>[a] ->[a] ->[a]
merge [] l2 = l2
merge l1 [] = l1
merge (x:xs) (y:ys)
| x<=y = x : merge xs (y:ys)
| True = y : merge (x:xs) ys
de tal manera que al llamado merge [1,3,5,7,9] [2,4,6,8] responder [1,2,3,4,5,6,7,8,9]
La funcin Merge lo que hace es ir comparando la cabeza de las 2 lista. En caso que la cabeza de la x (primera lista)
sea menor a la cabeza de y (la segunda lista), entonces se concatena x con la llamada recurisva a su cola y la lista y.
caso contrario se concatena y con la llamada recursiva a la lista x con la cola de y.
Ahora se llama a la funcin Merge en la siguiente funcion mergeSort:
mergeSort::Ord a =>[a] ->[a]
mergeSort [] = []
mergeSort l = merge (mergeSort izq) (mergeSort der)
where
mitad = (div (length l) 2)
izq = take mitad l
Universidad de Pamplona
22
Universidad de Pamplona
23
a.
Lxico
b.
Proposicin
c.
Paradigma lgico
d.
Predicado
e.
Sintaxis
( )
f.
Reglas de inferencia
g.
Variable proposicional
h.
Reglas de equivalencia
i.
Ortografa
Universidad de Pamplona
24
k.
Palabras claves
m. Paradigma funcional
n.
Semntica
p.
Paradigma de programacin
q.
Paradigma imperativo
r.
Lenguaje de programacin
45-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
b.
Proposicin
c.
Paradigma lgico
d.
Predicado
e.
Sintaxis
f.
Reglas de inferencia
g.
Variable proposicional
h.
Reglas de equivalencia
i.
Ortografa
k.
Palabras claves
m. Paradigma funcional
n.
Semntica
p.
Paradigma de programacin
q.
Paradigma imperativo
r.
Lenguaje de programacin
Universidad de Pamplona
25
~p
p q
p q
p q
pq
48-Verificar si es tautologa o no
(p(pq))q
( p ( q p) ) q
((p q) (q r)) (p r)
( (p p) q ) ~q
(p (p q) ) p
( (p ~p) q) ~ q
49-Dadas las siguientes proposiciones compuestas, hallar su valor de verdad si: p = v q = f
(p q) ((r s) p)
(p (r s) q ) falso
((p q) (q r)) (p r)
r=-p s=-r
Universidad de Pamplona
26
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
Disyuncin
Implicacin
Negacin
~
Equivalencia
Reglas de equivalencia
1. Doble Negacin (DN)
p=p
2. Conmutacin (CONM)
(p q) = (q p)
(p q) = (q p)
3. Asociacin (AS)
[p (q r)] = [(p q) r]
[p (q r)] = [(p q) r]
4. Distribucin (DIS)
[p (q r)] = [(p q) (p r)]
[p (q r)] = [(p q) (p r)]
6. Implicacin (IMP)
(p q) = (p q)
7. Contraposicin (CP)
(p q) = (q p)
9. Equivalencia (EQ)
[p q] = [(p q) (q p)]
[p q] = [(p q) (~ p ~ q)]
10. Identidad (ID)
(pF)=p
(pV)=p
Universidad de Pamplona
27
52-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 q r ~ p ~ q r ~ p
p q r ~ p ~ q r (~ p p)
~ p ~ q ~ r ~ q ~ ~ p q r
p q r ~ p ~ q r (~ p p)
p q r ~ p ~ q r (~ p ~ p )
~ p ~ q ~ r ~ q ~ ~ p q r
((( p ~ q ) r ) ~ r ) ((q r ) p)
((~ p ~ q ) ~ r ) ((~ q r s ) p )
53-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
54-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
b.
Proposicin
c.
Es equivalente a V
d.
Predicado
e.
Es equivalente a F
f.
Reglas de equivalencia
g.
Variable proposicional
h.
Es equivalente a ~ r
( ) Una expresin lgica puede ser sustituida por otra expresin lgica
equivalente haciendo uso de...
i.
Contradiccin
( ) La expresin ~ (( p V ) (r F ))
k.
Lgica
m. Constante proposicional
n.
Tautologa
Universidad de Pamplona
28
p.
Es equivalente a ~ p
q.
Es equivalente a p
r.
Es equivalente a ~ q
55-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
56-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
57-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
58-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
59-Cual es la negacin lgica del enunciado "hoy hay quiz de paradigmas si hoy es viernes?. Justifique su respuesta
60-Esta expresin lgica (~ p q) r es equivalente a:
a. ~ r ( p ~ q )
c. r p ~ q
b. ~ ( p ~ q ) r
d. ~ p (~ q r )
e. a y b
f. a y c
g. a y d
h. b y c
Universidad de Pamplona
29
((pq)r)q
(p q) r
(p q) (r ~q)
((p q)r) q
(~ p q ) ( p r )
(~ p q ) r
(( p q ) (q r )) ( p q)
63-Reducir la siguiente expresin a una forma normal conjuntiva
p (q p)
(p q)r
7. Simplificacin (S)
pq
Infiere p
8. Conjuncin (C)
p
q
Infiere p q
Universidad de Pamplona
30
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
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.
Universidad de Pamplona
31
a.
( )
b.
( )
c.
( )
d.
( )
e.
67-Utilizando las reglas de inferencia y de equivalencia, demostrar la conclusin a partir de las premisas en los
siguientes razonamientos
pq
r
( r q)
pq
( s p) r
q
Conclusin ... p
Conclusin... r
c
ab
( c b )
a ( c b)
(c b) d
Conclusin ... a
Conclusin ... a d
68-Elabore una sntesis de las reglas de inferencia, explique con sus palabras y de un ejemplo citando expresiones
lgicas en lenguaje natural.
Universidad de Pamplona
32
69-Analice
demostracin
razonamiento
la
siguiente
de validez del
(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
70~p
(p)
~p q
pq
71(p q)
r
(p)
(p)
r (p q)
(r p) (r q)
72(p q) r
p
(p)
(p)
pq
r
73(p s) (q r)
pq
p
qr
q
r
74(p q) (r s)
(s t) ~ (r s)
~ (r s) (s t)
(r s) (s t)
(p q) (s t)
75(p q) r
(r s) t
pq
(p q) (r s)
rt
76p (q s)
~ r ~ (q s)
p
(q s) r
pr
77~p
~p ~q
~ (p q)
~ (p q) r
(p q) r
78-
(p)
(p)
(p)
(p)
(p)
(p)
(p)
(p)
(p)
(p)
(p)
~ (p q)
~ (~p q)
~ ~p ~q
p ~q
~q
79pq
q [p (r s)]
rs
~ (r s)
(r s) (~r ~s)
~r ~s
~ (r s)
p [ p ( r s)]
(p p) (r s)
(p)
(p)
(p)
(p)
(p)
p (r s)
~p
~p q
pq
80(q r) (s p)
~s
~s ~p
~(s p)
~ (q r)
~q ~r
~q
~q p
(p)
(p)
Universidad de Pamplona
33
Conclusin ~r ~q
82p (q r)
~q ~r
Conclusin ~p
83~pq
~ r ~q
Conclusin p r
84~ (q ~r)
pq
90~s
q (r s)
Conclusin ~q ~r
91~p (q r)
conclusin (p q) (p r)
92~p
conclusin ~ (p ~q)
Conclusin p r
85(~p q) r
pq
Conclusin r s
86~r
~p (r q)
Conclusin p
87q (p r)
~p
Conclusin q
88~r ~ (q p)
ps
Conclusin r t
89~p (q r)
~q
Conclusin p
93pq
~ (q ~r)
Conclusin p s
94(r s) (q p)
~p
Conclusin r
95pq
Conclusin p ~q
96~r (q p)
Conclusin ~p v (~r q)
97~r p
(p q) r
Conclusin ~q
98-
rs
(t ~r) ~s
Conclusin ~r
99~pq
~ (~ s p) ~r
~q
Conclusin ~r
100~p
(q p) r
~q
Conclusin ~ (r t)
101p (~q s)
q~p
Conclusin ~q
102~r ~ (q p)
~r p
Conclusin ~q
103~ (p q) ~r
(~ p q ) r
Conclusin p
104p (q r)
~r s
~s t
Conclusin t (~q ~ p)
Universidad de Pamplona
34
105q (r s)
r ~p
~ (~q p)
Conclusin s
106su
~(r ~u)
~s
conclusin ~r
107q (p s)
rq
p
Conclusin r s
108(p q) (r s)
~s
p
Conclusin r t
109(p q) (s t)
~p r
s ~t
Conclusin r
110pq
rs
(q s) t
~t
Conclusin ~ (p r)
111~p (q r)
(p s) t
~ (p s) ~r
~t
Conclusin ~q
112~ (p ~s) ~q
~s (~t ~p)
Conclusin ~q t
113-(p r) (p q)
p ~q
Conclusin r
114[p (q r)] (s t)
~q p
Conclusin ~ t s
115[ q (r s)] (q r)
~ (s ~p)
Conclusin p (q s)
116p [(q u) r]
(~r s) t
Conclusin p (u t)
117p (r q)
(r q) s
Conclusin p s
118[(p q) (r s)] (s q)
(q t ) ( t u)
(u ~r)
Conclusin ~q
119[(q t) (u s)] (r ~s)
qu
tr
Conclusin p
120~pq
(s ~p) ~r
~q
Conclusin ~r
Simbolice los siguientes razonamientos y demuestre su validez utilizando las reglas de equivalencia y de inferencia
121-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)
122-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)
Universidad de Pamplona
35
123-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.
124-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).
125-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).
126-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).
127-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).
128-Si los estudiantes preparan el examen, entonces hay parcial de paradigmas, 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.
129-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
130-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.
Universidad de Pamplona
36
131-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.
132-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.
133-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
134-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.
135-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
136-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
137-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
138-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.
139-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.
140-Los exmenes parciales no se realizaran este ao si los estudiantes exigen flexibilidad acadmica. Si los
estudiantes no exigen flexibilidad acadmica entonces no hay normalidad acadmica en la universidad. Los parciales se
realizaran este ao. Por lo tanto no hay normalidad acadmica en la universidad.
141- Si presente el parcial a tiempo entonces obtuve buena nota y aprob la materia. No obtuve buena nota si no
estudie para el parcial. Presente el parcial a tiempo. Por lo tanto presente el parcial a tiempo, estudie para el parcial y
aprob la materia.
Universidad de Pamplona
37
142- Si el TLC es conveniente para Colombia o se integra Colombia al ALBA entonces la economa se fortalece. No
habr importaciones significativas o las exportaciones permanecen iguales si El TLC no es conveniente para Colombia.
La Economa Colombiana no se fortalece. Si el TLC no es conveniente para Colombia y no se integra Colombia al
ALBA entonces las exportaciones no permanecern iguales. Por lo tanto no habr importaciones significativas
Universidad de Pamplona
38
Universidad de Pamplona
39
150-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.
151-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.
152-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.
153-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.
154-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.
p q r ~p ~q r ~p
Verdadera
Falsa
Depende de r
Todas las anteriores
Ninguna de las anteriores
156-Cuales de las
proposiciones
4=5
Juan es un nombre
8 es primo
hoy es viernes?
Todas las anteriores
siguientes
p q p q
expresiones
son
Tautologa
Contradiccin
Contingencia
Todas las anteriores
Ninguna de las anteriores.
159-La siguiente expresin es equivalente a:
pq
a. ~ p q
Universidad de Pamplona
40
b. ~ q ~ p
c. ~ ( p ~ q)
d. Todas las anteriores
Ninguna de las anteriores
160-La siguiente tabla de verdad corresponde a la
expresin
P
???
a. (~ p q ) r
b. ~ q ~ p
c. ( p q ) ~ p ~ q
d. Todas las anteriores
Ninguna de las anteriores
161-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
3.8 Prolog
3.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
Universidad de Pamplona
41
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.
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).
Universidad de Pamplona
42
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.
3.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
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.
Universidad de Pamplona
43
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).
165-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?
Universidad de Pamplona
44
Silvestre caza a linda. Silvestre es un felino. Linda es un rumiante. Linda tiene cuernos. Linda es ms lenta que
silvestre. Linda come hierba
Los felinos son mamferos
Los rumiantes son mamferos.
Los mamferos tienen pelo
Los mamferos cazados por carnvoros son herbvoros.
Los felinos son carnvoros, tienen garras y tienen dientes
Los carnvoros que cazan herbvoros ms lentos que ellos, se los acaban devorando.
Cuales serian los objetivos externos para preguntar
Existe alguien que tenga pelo?
Es Linda un herbvoro?
Silvestre devora a linda?
168- Haga un programa en prolog que represente el siguiente conocimiento
Una persona se convierte en vampiro si es mordida por un vampiro.
Ledstat es un vampiro.
Ledstat ha mordido a Ana.
Las hijas de las brujas son a su vez brujas.
Averia es una bruja.
Ana es hija de Averia.
Se consideran monstruos los vampiros, las brujas y los profesores que suspenden.
Jose es profesor y ha suspendido a Xoxe.
Con que llamado externo se resuelve los siguientes interrogantes y cual seria su salida?
Interrogante
Es Ana un monstruo?
Quienes son monstruos?
Es Jos vampiro?
Quienes son brujas?
Universidad de Pamplona
45
Universidad de Pamplona
46
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.
Universidad de Pamplona
47
b(X,Z),
c(Z,W),
c(5,8)
d(W,Y).
d(8,2)
d(8,5)
b(1,5)
d(8,6)
c(5,3)
d(3,9)
d(3,11)
c(5,30)
b(8,12)
d(10,15)
c(7,10)
d(10,20)
b(2,7)
c(7,21)
Universidad de Pamplona
48
Nota: Tres segmentos pueden formar triangulo si la longitud de cada uno de sus lados es menor a la suma de las
longitudes de los otros dos lados
n!
si n 0
1
n!
n( n 1)! si n 0
176- Hacer un programa en prolog que calcule un combinatorio segn la siguiente definicin recursiva:
n n
1
0 n
n n 1 n 1
k k k 1
177-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
178-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
179-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
180- La funcin de Ackerman A, est definida para todos los valores enteros no negativos m y n de la siguiente forma:
n 1
si
m0
A(m, n)
A(m 1 , 1)
si m 0 , n 0
A(m 1 , A(m , n 1)) si m 0 , n 0
Hacer un programa en prolog que calcule la funcin Ackerman de cualquier par de enteros no negativos
Universidad de Pamplona
49
Universidad de Pamplona
50
Universidad de Pamplona
51
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],!.
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).
194-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
2 2 0 2 3 2 13
2
es
12 3 2 10 ,
1 0 1 ...... 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),!.
195-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]
196-Eliminar los elementos repetidos de una lista
197-Rotar los elementos de una lista, cierta cantidad de veces
Universidad de Pamplona
52
Universidad de Pamplona
53
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
204-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).
205-Analizar las siguientes definiciones en prolog e implementar los predicados descritos
domains
numero=integer
listanumero=numero*
tpar=p(listanumero,listanumero)
listapares =tpar*
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)
Universidad de Pamplona
54
Universidad de Pamplona
Facultad de Ingenieras y Arquitectura
Gua del estudiante para Paradigmas de Programacin
Profesor: Luis Alberto Esteban Villamizar
-----------------------------------------------------------------------------------------------------------------------------01-2015----------
pertenece(rene,nacional).
pertenece(oscar,america).
pertenece(wilmera,america).
(* y muchos ms hechos de este tipo)
55
Universidad de Pamplona
56
211-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.
212-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.
213-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
f(dia, mes, anio)
214- 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.
Universidad de Pamplona
57
En un archivo de texto se tiene un diccionario consistente de predicados de tipo definicin, los cuales tiene como
trminos una palabra y un listado de definiciones de dicha palabra.
215-Dado el siguiente segmento de cdigo, construya los predicados necesarios para que en el objetivo interno se pida
una letra y en pantalla imprima todas las palabras que inicia con dicha letra, con sus respectivos conceptos.
domains
palabra=string
conceptos=string*
database-diccionario
definicion(palabra,conceptos)
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)