Secciones de la página

Recursión


Constraint. Action


TowerHanoi. Recursive


ChRules. RandRecursive

Tol

Artículos del sitio

Presentación de Tol

Todos los programas

Simuladores visuales

Sitios que me gustan

Por categorías

Algoritmia

Búsqueda y ordenación

Computación fisiológica

Editorial y edición

Gráficos de datos

Herramientas y utilidades

Hipertexto

Informática forense

Lectura óptica de datos

Metaprogramación

No determinista

Ofimática

Recursión e iteración

Reglas y restricciones

Series y estadística









Programas con algoritmos recursivos

Programas con algoritmos recursivos, de lo que a veces podrá encontrar, también su versión iterativa.

A continuación se expone un breve resumen de cada uno de los progamas y, en cada programa, pulsando sobre el botón azul con flecha, a la derecha del título, se accede a su código completo.

make.tol de Constraint.Action

Programa de ejemplo de solucion de sistemas de restricciones del tipo (restriccion, accion correctora) programados de 3 formas diferentes a) por evaluacion iterativa, b) por recursion pura y c) por 2 funciones recursivas donde la primera se apoya en la segunda. De los 3 metodos es el iterativo el que puede resolver problemas con un mayor numero de

Programa de ejemplo de solucion de sistemas de restricciones del tipo (restriccion, accion correctora) programados de 3 formas diferentes a) por evaluacion iterativa, b) por recursion pura y c) por 2 funciones recursivas donde la primera se apoya en la segunda. De los 3 metodos es el iterativo el que puede resolver problemas con un mayor numero de pasos, el segundo con mas capacidad es el de 2 funciones recursivas (birecursivo) y el recursivo puro puede producir un desbordamiento de la pila cuando el numero de pasos (acciones y pruebas de restricciones) aumenta. Es un programa desarrollado en un solo fichero Tol en el que se declaran todas las funciones para hechos, restricciones, base de hechos y sus 3 formas de resolucion. En el metodo iterativo, la memoria entre las iteraciones, se implementa con un fichero interno de datos en formato Bst. Es una version basica de programacion con restricciones para uso formativo formativo donde: a) cada restriccion indica su solucion correctora, b) los hechos tienen como valor un solo numero y c) no existe un dominio para los valores de los hechos. Por ello puede resolver algunos problemas basicos de restricciones, en principio, sin circularidad en las restricciones, pero tiene problemas al resolver sistemas de restricciones mas complejos, si bien puede ser generalizable.

Con el metodo iterativo de Constraint.Action, el paso básico de comprobacion de la condicion asociada a una restriccion y aplicacion, en su caso, de la accion es el siguiente: a) Sea count el contador de restricciones que indica la restriccion que hay que comprobar. b) Sea initBase el estado actual de la base de hechos (memoria de trabajo) leida del fichero en formato Bst. c) Si la restriccion que indica count no se cumple, entonces hay que aplicar la accion de transformacion asociada a dicha restricción y volver a comprobar el conjunto de restricciones desde el principio (esto se hace volviendo a inicializar a 1 la variable de control del numero de restricciones, esto es, count:=1). Notese que el lenguaje Tol es un lenguaje de tipo declarativo donde la declaración de variables se realiza mediante el operador =, esto es que actuan como constantes, solo en algunos casos se utiliza el operador de resaignacion del valor :=, por ejemplo, esto suele suceder en las variables que controlan ciclos de iteracion While(), pero no suele ser necesario en los ciclos For() y EvalSet(). d) Si la restricción que indica la variable count se cumple, entonces no hay que cambiar la base de hechos y se debera proceder a comprobar la siguiente restriccion (esto se hace incrementando la variable de control de las restricciones comprobadas hasta ese momento, count:=count+1). e) Cuando hay algun cambio en la base de hechos se guarda en el fichero Bst el contenido de la base de hechos para que el cambio quede reflejado en la siguiente iteracion.

make.tol de TowerHanoi.Recursive

TowerHanoi.Recursive es un programa que resuelve de forma recursiva el problema conocido como de las Torres de Hanoi. Este problema se utiliza a menudo en programación para poner en práctica la programación recursiva como sucede en el presente caso. Este programa se estructura en base a un fichero principal make.tol que contiene tanto la definicion

TowerHanoi.Recursive es un programa que resuelve de forma recursiva el problema conocido como de las Torres de Hanoi. Este problema se utiliza a menudo en programación para poner en práctica la programación recursiva como sucede en el presente caso. Este programa se estructura en base a un fichero principal make.tol que contiene tanto la definicion de las variables como las funciones de resolución y funciones auxiliares, siendo la función principal de resolución HnoSolve(). El funcionamiento de este programa se ha probado para las versiones de Tol 1.1.1, 1.1.5, 1.1.6 y 2.0.1.

Las Torres de Hanói, como usualmente se le denomina en español, o Tower of Hanoi, como habitualmente se le denomina en inglés, es un juego matemático creado por el matemático francés Édouard Lucas en el año 1883. De hecho, Lucas lo comercializó como un juego, pero bajo el pseudónimo del Profesor N. Claus de Siam, mandarín del Colegio de Li-Sou-Stian que son 2 anagramas de Lucas d'Amiens (lugar de nacimiento de Lucas) y de Saint Louis. François Édouard Anatole Lucas, nacido en Amiens el 4 de abril de 1842 y fallecido en París, el 3 de octubre de 1891, además del juego de las Torres de Hanoi, trabajó en París en el observatorio astronómico y como profesor de matemáticas y destacó por sus investigaciones sobre la serie de Fibonacci y por el test de números primos que lleva su nombre, test de Lucas.

make.tol de ChRules.RandRecursive

ChRules.RandRecursive es un programa de aplicacion de reglas de reescritura que: a) aplica a un area rectangular de caracteres, b) reglas de transformacion de areas rectangulares de caracteres y c) que juntas forman una base de reglas de transformacion del contenido de ese area con un cierto objetivo. Las reglas de ChRules.RandRecursive son del

ChRules.RandRecursive es un programa de aplicacion de reglas de reescritura que: a) aplica a un area rectangular de caracteres, b) reglas de transformacion de areas rectangulares de caracteres y c) que juntas forman una base de reglas de transformacion del contenido de ese area con un cierto objetivo. Las reglas de ChRules.RandRecursive son del tipo [condicion, accion], esto es: a) si se cumple la condicion b) entonces se aplica la accion de transformacion. Tanto la parte de la condicion como la de la accion son 2 rectangulos de caracteres, en principio de identicas dimensiones, por ejemplo de 2x3 caracteres, de 1x2 caracteres, 3x5 caracteres, etc. La parte inicial del nombre del programa, ChRules, proviene de estas caracteristicas, Ch de Ch(aracters) y Rules de reglas, esto es, que se podrian llamar reglas de caracteres. La idea basica del funcionamiento es la siguiente: a) si en el estado actual del area de caracteres existe algun subarea rectangular con el mismo contenido que la parte de condicion de una regla, b) entonces dicha regla es aplicable y de aplicarse el subarea rectangular del area de caracteres que coincide con la condicion es sobreescrita, conservando la forma, con el area rectangular de caracteres de la accion de la regla. Por tanto, estas reglas de rectangulos de caracteres que utiliza el programa ChRules.RandRecursive pueden considerarse como reglas de reescritura, pero, a diferencia de otras reglas de reescritura, en vez de trabajar con secuencias de caracteres trabajan con areas rectangulares de caracteres.

El programa ChRules.RandRecursive tiene 2 particularidades que le definen y que forman parte de su nombre, RandRecursive, que son: a) El ciclo del motor de comprobacion y aplicacion de reglas es recursivo. b) Tanto la aplicacion de reglas como la seleccion de subareas donde aplicar la regla son escogidas al azar. La aplicacion al azar de las reglas significa que: a) Si en un determinado ciclo de evaluacion y con un determinado estado del area rectangular de caracteres son aplicables varias de las reglas de la base de reglas por conincidir su parte de condicion, al menos, con un subarea del area, se elige y se aplica al azar una de esas reglas. b) A su vez, al aplicar una regla, si su parte de condicion realiza match con mas de un subarea rectangular del area de caracteres, entonces se elige un subarea al azar y es sobre ese subarea sobre la que se aplica la transformacion. Esto implica una doble aleatoriedad en reglas y subareas de aplicacion lo que hace que cada uno de los casos de ejemplo que se incluyen en este programa y a los que se aplica el motor de reglas de ChRules.RandRecursive puede evolucionar, en cada ejecucion, de una manera muy diferente.

2015 asolver.com | Aviso legal | XHTML | Δ Θ Ξ | Creative Commons | Mapa y funciones del sitio

Tol