Universidad de Los Andes Facultad de Ingeniería Maestría en Modelado y Simulación de Sistemas Lógica Matemática para Simulación Sprint 1: ¿Cómo realizar una página web desde Prolog? Julio César Luna. C.I V-13.622.337 Mérida, 04 de Febrero de 2015 Introducción La programación lógica es un paradigma de los lenguajes de programación en el cual los programas se consideran como una serie de aserciones lógicas. De esta forma, el conocimiento se representa mediante reglas, tratándose de sistemas declarativos. Una representación declarativa es aquélla en la que el conocimiento está especificado, pero en la que la manera en que dicho conocimiento debe ser usado no viene dado. El más usado de los sistemas de programación lógica es el PROLOG. Un programa escrito en PROLOG puro, es un conjunto de cláusulas de Horn. Sin embargo, PROLOG, como lenguaje de programación moderno, incorpora más cosas, como instrucciones de Entrada/Salida, etc. Una cláusula de Horn puede ser o bien una conjunción de hechos positivos o una implicación con un único consecuente (un único termino a la derecha). La negación no tiene representación en PROLOG, y se asocia con la falta de una afirmación (negación por fallo), según el modelo de suposición de un mundo cerrado (CWA); solo es cierto lo que aparece en la base de conocimiento o bien se deriva de esta. Las diferencias sintácticas entre las representaciones lógicas y las representaciones PROLOG son las siguientes: * En PROLOG todas las variables están implícitamente cuantificadas universalmente. * En PROLOG existe un símbolo explicito para la conjunción “y” (“,”), pero no existe uno para la disyunción “o”, que se expresa como una lista de sentencias alternativas. * En PROLOG, las implicaciones p –> q se escriben al revés q :- p, ya que el intérprete siempre trabaja hacia atrás sobre un objetivo. Reglas. Las reglas se utilizan en PROLOG para significar que un hecho depende de uno o más hechos. Son la representación de las implicaciones lógicas del tipo p —> q (p implica q). Supóngase el siguiente razonamiento lógico: tiempo(lluvioso) —-> suelo(mojado) suelo(mojado) Que el suelo está, mojado, es una condición suficiente de que el tiempo sea lluvioso, pero no necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicación, que está, lloviendo (pueden haber regado las calles). La representación correcta en PROLOG, sería: suelo(mojado) :- tiempo(lluvioso). suelo(mojado). Sabiendo que la regla está “al revés”. Esto es así por el mecanismo de deducción hacia atrás que emplea PROLOG. Si se cometiera el error de representarla como: tiempo(lluvioso) :- suelo(mojado). suelo(mojado). PROLOG, partiendo del hecho de que el suelo está mojado, deduciría incorrectamente que el tiempo es lluvioso. Pregunta tipo 1: ¿Cómo generar una página web a partir de un código con html termerizado en Prolog? A continuación se realiza un ejemplo básico de cómo generar una página web mediante Prolog. Se puede observar mediante una página web un breve mensaje de bienvenida que dice: “Bienvenidos a mi página web”, para ello se realiza el siguiente código fuente: :- use_module(library(http/thread_httpd)). :- use_module(library(http/http_dispatch)). :- use_module(library(http/html_write)). :- http_handler(root(bienvenidos), say_hi, []). server(Port) :http_server(http_dispatch, [port(Port)]). say_hi(_Request) :reply_html_page(title('Bienvenidos'),[ h2('Bienvenidos a mi página Web')]). ?-server(80). Y se tiene como resultado, Si se quiere darle un poco de color a la página web generada mediante PROLOG, se le agrega la siguiente sintaxis al código fuente: :- use_module(library(http/thread_httpd)). :- use_module(library(http/http_dispatch)). :- use_module(library(http/html_write)). :- use_module(library(http/http_parameters)). :- use_module(library(http/html_head)). :- http_handler(root(bienvenidos), say_hi, []). server(Port) :http_server(http_dispatch, [port(Port)]). say_hi(_Request) :reply_html_page(title('Bienvenidos'),[center( h1('Bienvenido Web'))]),format('<html><head><title></title></head><body bgcolor="yellow"></body></html>'). ?-server(80). Y se obtiene el siguiente resultado, a mi Página
© Copyright 2024