Está en la página 1de 6

1

Recursividad y Programación Lógica


Reynaldo Vladimir Hurtado Morató


Resumen—En este artículo se aborda una metodología que Ejemplo 2
permite obtener algoritmos recursivos. Trama(Nodo1,Nodo2):-

Palabras clave—Prolog, recursividad.

I. BREVE INTRODUCCIÓN A LA PROGRAMACIÓN LÓGICA

P ROLOG es un lenguaje declarativo debido a que la


naturaleza de sus sentencias está basada en definiciones.

Prolog define relaciones entre conjuntos de datos, los cuales


son consultados a objeto de verificar si cierta relación se
cumple. En otras palabras, Prolog mediante hechos y reglas
define una base de conocimiento de la cual extrae
conocimiento implícito.
Prolog no computa una respuesta sino que la deduce a partir
de las relaciones definidas. Muy al contrario de evaluar una
expresión, Prolog interpreta la expresión como una pregunta:
Fig. 1. Arbol de relaciones.
¿Para que valores de parámetros la expresión evalua
como verdadera? Rama(Nodo1,CualquierNodo),
Rama(CualquierNodo,Nodo2).
A. Hechos
En resumen: Los hechos son verdades incondicionales,
Los hechos relacionan n-tuplas de constantes, donde el mientras que las reglas son verdades condicionales.
identificador es interpretado como el nombre de una relación. Un hecho especifica una tupla de valores que satisface un
El identificador es conocido como “predicado” y cuando predicado. Una regla especifíca bajo que condiciones una
una tupla está en la relación se dice que la tupla satisface el tupla de valores satisface un predicado.
predicado.
Ejemplo 1 C. Átomo
Es un predicado seguido de una tupla de términos que
rama(a,b). rama(c,f). pueden ser variables o constantes. De esta definición se
rama(a,c). rama(c,g). deduce que todo hecho es un átomo.
rama(b,d). rama(e, h). Las reglas se dividen en dos partes mediante el símbolo :-.
rama(b,e). El lado izquierdo se conoce como cabeza, y el derecho como
cuerpo.
El ejemplo está compuesto por siste hechos, donde el En general se tiene
identificador rama es un predicado.
atomo :- atomo 1, atomo 2, …, atomo n
B. Reglas
Las reglas son predicados donde los parámetros empiezan que se interpreta como:
con mayúsculas, lo cual significa que son variables y no
constantes. Adicionalmente estos predicados son definidos por Si cada atomo 1, atomo 2, …., atomo n es verdadero,
otros predicados que están relacionados matemáticamente. entonces el atomo es verdadero también.
D. Consultas (queries)
R.eynaldo Hurtado es Ingeniero en Electrónica y maestrante en Ingeniería
del Software, Universidad Mayor de San Andrés, La Paz Bolivia (e-mail: Las consultas son una conmjunción de átomos y facilitan la
reyhur@ hotmail.com).
2

computación. No reemplaza rama(b,Nodo2) con nada ya que se


Una consulta es una pregunta: ¿Es la consulta verdadera? unificó con un hecho.
Como la consulta está vacía se finaliza.
E. Ground queries
Si la consulta solo tiene valores como parámetros se la Se debe notar lo siguiente en el ejemplo anterior:
denomina ground query, y se espera que la respuesta sea
yes/no. - El parámetro constante fué pasado a cada átomo
F. Non-ground queries sucesivo como valor, mientras que la variable X fué
Cuando la consulta tiene variables como parámetros se la pasada por referencia.
denomina non-ground query. - En ningún momento se ha tenido algo así como en la
La consulta computación tradicional, solo la unificación para
emparejar argumentos y la resolución para
trama(a, X). reformular la consulta.
I. Backtracking
es non-ground y se satisface si existe una sustitución para las Cuando la consulta es reducida a una consulta vacía se
variables que hacen la consulta verdadera. realiza el backtrack a la más reciente unificación para
G. Unificación determinar si hay otro hecho o regla que con unificación pueda
Es el proceso de tomar dos átomos y determina si hay una satisfacerse, y que si existe una solución adicional esta puede
sustitución que los hace iguales. ser encontrada. El backtracking continua hasta que todas las
posibles respuestas han sido exploradas.
H. Resolución Ejemplo 4
Cuando un átomo de una consulta se ha unificado con la Considerar la consulta trama(z,X) con backtracking
cabeza de una regla (o hecho), la resolución reemplaza al
átomo con el cuerpo de la regla (o con nada en un hecho) y 1. trama(a,X) con trama(Nodo1,Nodo2)
luego aplica la sustitución a la nueva consulta. a. Unifica a=Nodo1, Nodo2= X
Ejemplo 3 b. Resuelve trama(a,X):-
rama(Nodo1,CualquierNodo),rama(Cualquier
1. trama(a,X). Nodo,Nodo2)
a. Unificación 2. rama(a,CualquierNodo) con rama(a,b)
Unifica trama(a, X) con trama(Nodo1,Nodo2) a. Unifica CualquierNodo=b
sustituyendo b. No resuelve. Sustituye obteniendo
rama(b,Nodo2)
a= Nodo1, Nodo2 = X 3. rama(b,Nodo2) con rama(b,d)
a. Unifica Nodo2=d
b. Resolución b. No resuelve
Reemplaza trama(a,X) con rama(Nodo1, 4. backtrack a la última unificación:
CualquierNodo), rama(CualquierNodo,Nodo2) rama(b,Nodo2)
a. No se puede unificar. Backtrack a la
2. rama(a, CualquierNodo) unificación anterior
a. Unificación Rama(a,CualquierNodo) con rama(a,c)
Unifica rama(a, CualquierNodo) con rama(a, b) Unifica CualquierNodo=c
sustituyendo b. No resuelva. Sustituye obteniendo
rama(c,Nodo2)
CualquierNodo = b 5. rama(c,Nodo2) con rama(c,f)
a. Unifica Nodo2 = f
b. Resolución b. No resuelve
No reemplaza rama(a, CualquierNodo) con nada ya
que se unificó con un hecho. Se aplica la
J. Listas
sustitución para obtener la nueva consulta.
3. rama(b, Nodo2) En Prolog las listas se representan con paréntesis cuadrados.
a. Unificación La lista vacía es representada como []
Unifica rama(b,Nodo2) con rama(b,d) sustituyendo La lista[X|Y] representa una lista cuya cabeza es X y la cola
es Y. Basados en esta interpretación la unificación funciona
Nodo2 = d como sigue:
b. Resolución
3

[X|Y] unifica con [a b c] como X = a, Y = [b c] C. Simplificación de la Rutina.- Algo que nos ayude a
[X|Y] unifica con [a b c d] como X = a, Y = [b c d] encoger el tamaño del problema hacia el caso base.
[X|Y] unifica con [a] como X= a, Y = []
[X|Y] no unifica con [] D. Recursión Natural.- Expresa una llamada recursiva de la
función a la versión simplificada del problema
Las listas son bloques de trabajo fundamentales en la E. Completación.- Dada la solución es necesario preguntar
programación con Prolog. que es lo que se necesita hacer con la respuesta de la llamada
Por otra parte, la recursividad es también de fundamental recursive para formar la respuesta del problema original. Es
importancia en la programación lógica. necesario pensar en cual es la respuesta que da la llamada
recursiva y evitar preguntar como funciona.
El siguiente ejemplo aclara el procedimiento descrito.
II. RECURSIVIDAD
Ejemplo 5.- Sumar los dígitos de un número entero
En esta sección se va a demostrar que la recursividad puede
ser tratada con mucha más facilidad si se piensa en que hace el Solución.- Para simplificar el análisis del problema es
algoritmo y no en como lo hace. Para lograr este objetivo se va aconsejable utilizar un caso específico y no así el caso más
a hacer uso de la modularidad. general.
Para el ejemplo utilizamos el número 2368 = 2+3+6+8 = 20
A. Dividir y Conquistar
Un problema puede ser resuelto utilizando modularidad, la a. Caso base.- La solución es trivial, para los enteros de un solo
cual se consigue con la simple idea de divider y conquistar. dígito.
La estrategia de dividir y conquistar establece: - Test: n < 10
1. Dividir un problema grande en piezas pequeñas - Respuesta: n
2. Resolver las piezas pequeñas
3. Combinar las soluciones b. Simplificación de la rutina.- Renecesita dividir el problema
en subproblemas del mismo tipo, y existen varias maneras de
Por ejemplo, si consideramos el caso de comprar un auto, el hacer esto:
problema puede dividirse en otros dos: 2 368 = 2 + (3+6+8)
23 68 = (2+3) + (6+8)
a. buscar el auto que uno quiere
236 8 = (2+3+6) + 8
b. conseguir financiamiento
////Insertar gráfico
Cada una de las divisiones debería funcionar en teoría, es
así que la atención debería centrarse en cual de ellas es más
En este caso se ha dividido un problema grande en dos
fácil de implementar en la práctica. En nuestro caso
subproblemas, cada uno posiblemente de diferentes tipos.
utilizaremos la tercera opción.
La recursión es un caso especial de dividir y conquistar
//inserter grafico
donde los subproblemas individuales son del mismo tipo. De
manera figurativa, para resolver un cuadradono se debe dividir
c. Recursión Natural.- Este es un paso mecánico que no
en un pequeño círculo y un pequeño rectángulo sino en
requiere de mucha reflexión
pequeños cuadrados.
///Insertar grafico
sumarDigitos(236) = sumarDigitos(N/10)
Los siguientes pasos son muy útiles al momento de diseñar
donde ‘/ ‘denota la división entera.
un algoritmo recursivo.
d. Completación.- Asumiendo que conocemos la respuesta a
la recursión natural, necesitamos saber qué más debe ser hecho
B. Caso Base.- La más pequeña instancia del problema para determinar la respuesta final.
parala cual conocemos la respuesta sin mayor esfuerzo. Para En la recursión natural sumarDigitos(236) deberá dar 12
ello se necesitan dos elementos como respuesta. Dado este valor necesitamos adicionar el
- Un test para reconocer el caso base primer dígito (8) para obtener la respuesta final. La
- Una respuesta para el caso base completación es:

sumarDigitos(N/10) + n%10

donde ‘%’ es el operador módulo.


e. Solución Prolog.- Poniendo todo junto y utilizando
Prolog como lenguaje de programación, obtenemos la
4

siguiente solución: //incluir grafico


sumarDigitos((N,N);- N < 10; c. Recursión Natural
sumarDigitos(N,S):- N <= 10, N1 is N/10,
N2 is mod(N,10), fibonacci(5) = fibonacci(N-1)
sumarDigitos(N1, X), fibonacci(4) = fibonacci(N-2)
S is X + N2; d.Completación.-

fibonacci(N) = fibonacci(N-1) + fibonacci(N-2)


III. PROBLEMAS RESUELTOS
e.- Solución Prolog
A. Calcular el factorial de un número natural N.
fib(0,1);
Solución.- fib(1,1).
fib(N,F):- fib(N-1,R1), fib(N-2,R2),
a. Caso base.- El caso base de da cuando N = 0. Para esta F is R1 + R2.
situación el factorial es 1.
- Test: N= 0
- Respuesta: 1 C. Torres de Hanoi.
b. Simplificación de la rutina.- Supongamos que queremos Se tienen tres ejes y N discos de diferentes radios. Solo se
encontrar el factorial de 6, para ello podemos dividir el permite que los discos de radio menor vayan sobre los de radio
problema en subproblemas del mismo tipo mayor.
Inicialmente se apilan todos los discos sobre el eje izquierdo
6! = 1*2*3*4*5*6 y la finalidad es trasportarlos al eje derecho.
//incluir gráfico
Algunas posibles subdivisiones del problema son:
Solución.-
6! = 1*(2*3*4*5*6)
6! = (1*2*3)*(4*5*6) a. Caso base.- Se tiene el mayor disco no acomodado sobre uno
de los ejes. Se mueve el disco al eje derecho
6! = (1*2*3*4*5)*6

Si elegimos la tercera opción obtenemos 6! = 5!*6 - Test: disco mayor no acomodado sobre eje
//insertar gráfico izquierdo o central
c. Recursión Natural.- - Respuesta: mover el disco al eje derecho

factorial(5) = factorial(N-1) b. Simplificación.- Si el problema consiste en mover N


discos de un eje inicial a un eje final, el problema se simplifica
d. Completación.- Conociendo la respuesta de la recursión moviendo N-1 discos de un eje a otro intermedio, luego se
natural el resultado debe multiplicarse por N. La completación mueve el disco restante (disco mayor) al eje final (caso base).
es: //incluir gráfico
factorial(N-1)*N c. Recursividad Natural.- Sea la función mueve(N,I,C,D)
e. Solución Prolog.- que mueve N discos de I a D. La recursividad natural conduce
factorial(0,1); a mover N-1 discos de I a C, de donde se tiene
factorial(N,F):- factorial(N-1,R),
F is N*R; mueve(N-1,I,D,C)

B. Calcular el N-ésimo término de la serie de Fibonacci d. Completación.- Se debe mover N-1 discos de la posición
inicial a una posición intermedia, el disco que resta se mueve a
Solución.- la posición final, luego se mueven los N-1 discos restantes a la
posición final
a. Caso Base.- El fibonacci de 0 es 1, y el fibonacci de 1 es 1.
- Test: N <= 1 mueve(N,I,C,D) = mueve(N-1,I,D,C),
- Respuesta: 1 mueve(1,I,C,D),mueve(N-1,C,I,D)
b. Simplificación.- Se sabe que el un término de la serie de
fibonacci es la suma de los dos términos de fibonacci e. Solución Prolog
anteriores
mueve(1,I,C,D);- imprime(´mueve de´ I ‘a’ D).
5

mueve(N,I,C,D):- mueve(N-1, I, D, C), d. Completación.- Se debe concatenar el elemento eliminado con la


mueve(1,I,C,D), sublista permutada
mueve(N-1,C,I,D).
permutación(L, [H|P]):- elimina(H,L,T),
permutación(T,P).
D. Obtener los elementos de una lista
e. Solución Prolog
Solución.- Se tiene la lista L
permutación([], []).
permutación(L,[H|P]):-elimina(H,L,T),
a. Caso Base.- Obtenerle primer elemento de la lista permutación(T,P).
elimina(X,[X|T],T).
- Test: es el primer elemento de la lista? elimina(X,[H|T],[H|NT]):-elimina(X,T,NT).
- Respuest: primer elemento

b. Simplificación.- Si no es el primer elemento, generar una F. Combinaciones


nueva lista sin el primer elemento y buscar sobre esta nueva Es un subconjunto arbitrario de un conjunto conteniendo un
lista número dado de elementos donde el orden no es importante.
c. Recursión Natural.- Las listas pueden dividirse en una
cabeza y una cola [H|T], Si elemento(X,L,R) extrae el elemento Solución.- Sea combinación(N,L,C) la combinación de N
X de la lista L y genera una sublista R que contiene todos los elementos de la lista L que da como resultado la sublista C.
elementos de L menos X, la recursión natural será:

elemento(X, [H|T], [H|NT]):- elemento(X,T,NT). a. Caso Base.- La combinación de cero elementos de una lista da
como resultado la lista vacía.
d. Completación.- El código complete es
combinación(0,L,[]).
elemento(X,[X|T],T).
b. simplificación.- La combinación de N elementos de L es
elemento(X,[H|T],[H|NT]):- elemento(X,T,NT).
equivalente a extraer un elemento de L y combinar N-1 elementos
restantes
Nota.- El predicado elemento(X,L,R) resuelve como
verdadero si la lista L contiene al elemento X. Este predicado //incluir grafico
genera también una sublista R que contiene todos los
elementos de L menos X. Este predicado puede también ser c. Recursión Natural
usado para eliminar un elemento X de la lista L dando como
elimina(X,L,R), combinación(N-1,R,T).
respuesta R.
d. Completación.- Se debe concatenar el elemento eliminado con la
sublista combinada
E. Permutación de una lista
combinación(N,L,[X|T]):- elimina(X,L,R),
Solución.- La permutación de una lista es un conjunto de listas combinación(N-1, R,T).
que contienen todos los elementos de la misma en cierto e.Solución Prolog
orden.
Sea el predicado permutación(L,S) que genera en S una combinacion(0,L,[]).
permutación de L combinacion(N,L,[X|T]):-elimina(X,L,R),
combinación(N-1,R,T).
a. Caso Base.- La permutación de una lista vacía es una lista vacía

permutación([], []).
IV. CONCLUSIONES
b. Simplificación.- Se extrae un elemento de la lista y se permuta la
sublista resultante A conclusion section is not required. Although a conclusion
may review the main points of the paper, do not replicate the
//incluir grafico abstract as the conclusion. A conclusion might elaborate on the
importance of the work or suggest applications and extensions.
c. Recursión Natural.-

elimina(X,L,T), permutación(T,P) APPENDIX


Appendixes, if needed, appear before the acknowledgment.
6

ACKNOWLEDGMENT [23] R. E. Haskell and C. T. Case, “Transient signal propagation in lossless


isotropic plasmas (Report style),” USAF Cambridge Res. Lab.,
The preferred spelling of the word “acknowledgment” in Cambridge, MA Rep. ARCRL-66-234 (II), 1994, vol. 2.
American English is without an “e” after the “g.” Use the [24] E. E. Reber, R. L. Michell, and C. J. Carter, “Oxygen absorption in the
Earth’s atmosphere,” Aerospace Corp., Los Angeles, CA, Tech. Rep.
singular heading even if you have many acknowledgments.
TR-0200 (420-46)-3, Nov. 1988.
Avoid expressions such as “One of us (S.B.A.) would like to [25] (Handbook style) Transmission Systems for Communications, 3rd ed.,
thank ... .” Instead, write “F. A. Author thanks ... .” Sponsor Western Electric Co., Winston-Salem, NC, 1985, pp. 44–60.
and financial support acknowledgments are placed in the [26] Motorola Semiconductor Data Manual, Motorola Semiconductor
Products Inc., Phoenix, AZ, 1989.
unnumbered footnote on the first page. [27] (Basic Book/Monograph Online Sources) J. K. Author. (year, month,
day). Title (edition) [Type of medium]. Volume(issue). Available:
REFERENCIAS http://www.(URL)
[28] J. Jones. (1991, May 10). Networks (2nd ed.) [Online]. Available:
[1] G. O. Young, “Synthetic structure of industrial plastics (Book style with http://www.atm.com
paper title and editor),” in Plastics, 2nd ed. vol. 3, J. Peters, Ed. New [29] (Journal Online Sources style) K. Author. (year, month). Title. Journal
York: McGraw-Hill, 1964, pp. 15–64. [Type of medium]. Volume(issue), paging if given. Available:
[2] W.-K. Chen, Linear Networks and Systems (Book style). Belmont, CA: http://www.(URL)
Wadsworth, 1993, pp. 123–135. [30] R. J. Vidmar. (1992, August). On the use of atmospheric plasmas as
[3] H. Poor, An Introduction to Signal Detection and Estimation. New electromagnetic reflectors. IEEE Trans. Plasma Sci. [Online]. 21(3). pp.
York: Springer-Verlag, 1985, ch. 4. 876—880. Available: http://www.halcyon.com/pub/journals/21ps03-
[4] B. Smith, “An approach to graphs of linear forms (Unpublished work vidmar
style),” unpublished.
[5] E. H. Miller, “A note on reflector arrays (Periodical style—Accepted for
publication),” IEEE Trans. Antennas Propagat., to be published.
[6] J. Wang, “Fundamentals of erbium-doped fiber amplifiers arrays
(Periodical style—Submitted for publication),” IEEE J. Quantum
Electron., submitted for publication. First A. Author (M’76–SM’81–F’87) and the other authors may include
[7] C. J. Kaufman, Rocky Mountain Research Lab., Boulder, CO, private biographies at the end of regular papers. Biographies are often not included in
communication, May 1995. conference-related papers. This author became a Member (M) of IEEE in
[8] Y. Yorozu, M. Hirano, K. Oka, and Y. Tagawa, “Electron spectroscopy 1976, a Senior Member (SM) in 1981, and a Fellow (F) in 1987. The first
studies on magneto-optical media and plastic substrate paragraph may contain a place and/or date of birth (list place, then date).
interfaces(Translation Journals style),” IEEE Transl. J. Magn.Jpn., vol. Next, the author’s educational background is listed. The degrees should be
2, Aug. 1987, pp. 740–741 [Dig. 9th Annu. Conf. Magnetics Japan, listed with type of degree in what field, which institution, city, state or
1982, p. 301]. country, and year degree was earned. The author’s major field of study should
[9] M. Young, The Techincal Writers Handbook. Mill Valley, CA: be lower-cased.
University Science, 1989. The second paragraph uses the pronoun of the person (he or she) and not
[10] J. U. Duncombe, “Infrared navigation—Part I: An assessment of the author’s last name. It lists military and work experience, including
feasibility (Periodical style),” IEEE Trans. Electron Devices, vol. ED- summer and fellowship jobs. Job titles are capitalized. The current job must
11, pp. 34–39, Jan. 1959. have a location; previous positions may be listed without one. Information
[11] S. Chen, B. Mulgrew, and P. M. Grant, “A clustering technique for concerning previous publications may be included. Try not to list more than
digital communications channel equalization using radial basis function three books or published articles. The format for listing publishers of a book
networks,” IEEE Trans. Neural Networks, vol. 4, pp. 570–578, July within the biography is: title of book (city, state: publisher name, year) similar
1993. to a reference. Current and previous research interests ends the paragraph.
[12] R. W. Lucky, “Automatic equalization for digital communication,” Bell The third paragraph begins with the author’s title and last name (e.g., Dr.
Syst. Tech. J., vol. 44, no. 4, pp. 547–588, Apr. 1965. Smith, Prof. Jones, Mr. Kajor, Ms. Hunter). List any memberships in
[13] S. P. Bingulac, “On the compatibility of adaptive controllers (Published professional societies other than the IEEE. Finally, list any awards and work
Conference Proceedings style),” in Proc. 4th Annu. Allerton Conf. for IEEE committees and publications. If a photograph is provided, the
Circuits and Systems Theory, New York, 1994, pp. 8–16. biography will be indented around it. The photograph is placed at the top left
[14] G. R. Faulhaber, “Design of service systems with priority reservation,” of the biography. Personal hobbies will be deleted from the biography.
in Conf. Rec. 1995 IEEE Int. Conf. Communications, pp. 3–8.
[15] W. D. Doyle, “Magnetization reversal in films with biaxial anisotropy,”
in 1987 Proc. INTERMAG Conf., pp. 2.2-1–2.2-6.
[16] G. W. Juette and L. E. Zeffanella, “Radio noise currents n short sections
on bundle conductors (Presented Conference Paper style),” presented at
the IEEE Summer power Meeting, Dallas, TX, June 22–27, 1990, Paper
90 SM 690-0 PWRS.
[17] J. G. Kreifeldt, “An analysis of surface-detected EMG as an amplitude-
modulated noise,” presented at the 1989 Int. Conf. Medicine and
Biological Engineering, Chicago, IL.
[18] J. Williams, “Narrow-band analyzer (Thesis or Dissertation style),”
Ph.D. dissertation, Dept. Elect. Eng., Harvard Univ., Cambridge, MA,
1993.
[19] N. Kawasaki, “Parametric study of thermal and chemical
nonequilibrium nozzle flow,” M.S. thesis, Dept. Electron. Eng., Osaka
Univ., Osaka, Japan, 1993.
[20] J. P. Wilkinson, “Nonlinear resonant circuit devices (Patent style),” U.S.
Patent 3 624 12, July 16, 1990.
[21] IEEE Criteria for Class IE Electric Systems (Standards style), IEEE
Standard 308, 1969.
[22] Letter Symbols for Quantities, ANSI Standard Y10.5-1968.

También podría gustarte