Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
de la Computacin
Material Adicional
Qu es un Metaintrprete?
Denominaremos metaintrprete a un intrprete para un lenguaje de programacin que est escrito en ese mismo lenguaje.
Metaintrpretes
Lgica para Ciencias de la Computacin
Primer Cuatrimestre de 2012 Material Adicional
solve(A).
Asumimos que el programa prolog a metainterpretar se encuentra en el mismo archivo .pl que el predicado solve/1 (meta-intrprete).
3
Material Adicional
Conjuncin de Metas
En Prolog, la coma (,) se utiliza para separar los predicados que componen el cuerpo de una regla, y su significado es el de un and o conjuncin. Ejemplo: a :- b,c,d,e. Tambin se utiliza para denotar una conjuncin de (sub)metas (o meta conjuntiva) en una consulta. Ejemplo: ?- p,q,r. Prolog interpreta a la , como un operador con asociatividad a derecha. De esta forma, la conjuncin de predicados p,q,r,s se interpretar como (p,(q,(r,s))).
7
10
Aplicaciones
Monitorear el progreso de la resolucin de una consulta. Extender al lenguaje mediante nuevos predicados predefinidos. Modificar la semntica de alguna de las partes del lenguaje. No es gratis: se paga un costo en trminos de eficiencia.
11 12
?- clause( p(a), Cuerpo). Cuerpo = q(a) ?- clause( p(b), Cuerpo). Cuerpo = q(b); Cuerpo = r(b), s(b) ?- clause( q(a), Cuerpo). Cuerpo = true
Material Adicional
Ejemplo Concreto
Definir un metaintrprete que cuente la cantidad de hechos visitados a lo largo de la resolucin de una cierta consulta: solve(true, 1). solve( (A, B), CHAB ) :solve(A, CHA), solve(B, CHB), CHAB is CHA + CHB. solve(A, CH) :clause(A, B), solve(B, CH).
13 14
FIN