Articulo de referencia

Volante

.frl "},"implementations":{"wt":""},"influenced by":{"wt":"{{ill|micro-PROLOG|es}}"},"influenced":{"wt":""}},"i":0}}]}"> Fril es un lenguaje de programación para el cálculo de p...

Fril es un lenguaje de programación para el cálculo de predicados de primer orden . Incluye la semántica de Prolog como un subconjunto, pero toma su sintaxis del micro-PROLOG de Logic Programming Associates y agrega soporte para conjuntos difusos , lógica de soporte y metaprogramación .

Fril fue desarrollado originalmente por Trevor Martin y Jim Baldwin en la Universidad de Bristol alrededor de 1980. En 1986, fue retomado y desarrollado aún más por Equipu AI Research, que más tarde se convirtió en Fril Systems Ltd. El nombre Fril era originalmente un acrónimo de Fuzzy Relational Inference Language (Lenguaje de Inferencia Relacional Difusa) .

Comparación entre Prolog y Fril

Aparte de las funciones de gestión de la incertidumbre de Fril, existen algunas diferencias menores en la implementación de las características estándar de Prolog en Fril.

Tipos

Los tipos básicos en Fril son similares a los de Prolog , con una excepción importante: el tipo de dato compuesto de Prolog es el término , con listas definidas como términos anidados mediante el .functor; en Fril, el tipo compuesto es la lista misma, que constituye la base de la mayoría de las construcciones. Las variables se distinguen por identificadores que contienen solo letras mayúsculas y guiones bajos (mientras que Prolog solo requiere que el primer carácter sea mayúscula). Al igual que en Prolog, el nombre _se reserva para significar "cualquier valor", y las múltiples ocurrencias de _se reemplazan por variables distintas.

Sintaxis

Prolog tiene una sintaxis con una cantidad típica de signos de puntuación, mientras que Fril tiene una sintaxis extremadamente simple, similar a la de Lisp . Una cláusula (proposicional) es una lista que consta de un predicado seguido de sus argumentos (si los hay). Entre los tipos de construcciones de nivel superior se encuentran las reglas y los comandos en modo directo.

Regla

Una regla es una lista que consta de una conclusión seguida de las hipótesis ( objetivos ). Las formas generales son las siguientes:

( hecho ) ( conclusión objetivo_1 ... objetivo_n )

Estas son equivalentes a las respectivas construcciones de Prolog:

hecho . conclusión :- meta_1 , ..., meta_n .

Por ejemplo, consideremos el memberpredicado en Prolog:

miembro ( E , [ E | _ ]). miembro ( E , [ _ | T ]) :- miembro ( E , T ).

En Fril, esto se convierte en:

((miembro E (E|_))) ((miembro E (_|T)) (miembro ET))

Relación

Algunos datos pueden representarse en forma de relaciones . Una relación es equivalente a un conjunto de hechos con el mismo nombre de predicado y de aridad constante , excepto que ninguno de los hechos puede eliminarse (salvo modificando killla relación); esta representación consume menos memoria internamente. Una relación se escribe literalmente como una lista que consta del nombre del predicado seguido de una o más tuplas de la relación (todos los argumentos del hecho equivalente sin el nombre del predicado). Un predicado también puede declararse como una relación llamando al def_relpredicado; esto solo funciona si el nombre propuesto no existe ya en la base de conocimiento . Una vez que un predicado es una relación, cualquier cosa que normalmente agregaría una regla (y no viole las restricciones de las relaciones) agrega automáticamente una tupla a la relación en su lugar.

Aquí hay un ejemplo. El siguiente conjunto de hechos:

((mi-menos-que 2 3)) ((mi-menos-de-8 23)) ((mi-menos-de-42 69))

se puede reescribir como la relación:

(mi-menos-que (2 3) (8 23) (42 69))

Modo directo

Se puede llamar a un predicado con exactamente un argumento utilizando la siguiente sintaxis:

argumento predicado

Las consultas se envían utilizando esta sintaxis, con el predicado siendo ?(o uno de los otros predicados relacionados con la consulta).

Conjuntos difusos

Fril admite conjuntos difusos continuos y discretos, cada uno con su propia sintaxis especial. Un conjunto discreto ( dtype ) enumera valores discretos y sus grados de pertenencia, con esta sintaxis:

{ valor : dom valor : dom ... valor : dom }

value es un átomo o número, y dom es un valor en el intervalo [0, 1].

Un conjunto continuo ( itype ) enumera los números reales y sus grados de pertenencia; la función de grado de pertenencia es la interpolación lineal sobre estas asignaciones. La sintaxis es, por lo tanto:

[ valor : dom valor : dom ... valor : dom ]

donde los valores deben darse en orden no decreciente.

Cada tipo de dato (dtype) e índice (itype) puede estar restringido a un universo (un conjunto de valores permitidos). Fril cuenta con predicados para operaciones de conjuntos difusos (pero no admite directamente el control mediante lógica difusa ). Incluso es posible combinar tipos de datos e índices mediante ciertas operaciones, siempre que los tipos de datos contengan únicamente números reales.

Pares de soporte

Cualquier regla puede tener un intervalo de probabilidad (llamado par de soporte) asociado , donde min y max son las probabilidades mínima y máxima. Fril incluye predicados que calculan el soporte para una consulta dada.:(minmax)

Disyunción

Mientras que Prolog utiliza la puntuación —a saber— para la disyunción dentro de ;las cláusulas, Fril en cambio tiene un predicado incorporado orr.

Méritos

Esta sintaxis más sencilla presenta ventajas y desventajas. Por un lado, elimina =..la necesidad de predicados como el de Prolog (que relaciona listas y cláusulas), ya que una cláusula es una lista. Por otro lado, resulta más difícil de leer.

Comportamiento

Como entorno de programación lógica, Fril es muy similar a Prolog. Estas son algunas de las diferencias:

  • Tanto Prolog como Fril cuentan con aplicaciones de shell , que constituyen la forma estándar de interactuar con ellos. Prolog lee comandos en dos modos: en el modo de lectura de archivos fuente, acepta directivas y cláusulas; en el modo de interacción con el usuario, solo acepta consultas (aunque es posible indicarle a Prolog que lea directivas y cláusulas desde la entrada estándar mediante consult(user).). Fril no hace distinción: todos los tipos de comandos pueden introducirse tanto desde archivos fuente como desde la línea de comandos.
  • La consola de Prolog imprime automáticamente los valores de todas las variables instanciadas que aparecen en una consulta, junto con una respuesta afirmativa o negativa . La consola de Fril solo proporciona la respuesta; es responsabilidad del usuario imprimir las variables si lo desea.

Referencias

  • Martin, TP (correo electrónico a M. Kantrowitz, 10 de marzo de 1994). Re: FRIL . Recuperado el 18 de octubre de 2005. Copia archivada el 27 de noviembre de 2014.
  • Pilsworth, BW (s.f.). El lenguaje de programación Fril. Archivado el 8 de abril de 2005 en Wayback Machine . Recuperado el 18 de octubre de 2005.
  • Fril Systems Ltd (1999). Fril - Manual de referencia en línea - Versión preliminar (incompleta). Archivado el 19 de febrero de 2006 en Wayback Machine . Consultado el 20 de octubre de 2005.
  • Fril - recursos descargables , el sitio oficial de descargas de Fril
  • [Laboratorio de Programación Lógica (Fril) e Inteligencia Artificial], Zengchang Qin
Obtenido de " https://en.wikipedia.org/w/index.php?title=Fril&oldid=1287846642 "