stringtranslate.com

Volante

Fril es un lenguaje de programación para cálculo de predicados de primer orden . Incluye la semántica de Prolog como subconjunto, pero toma su sintaxis de micro-PROLOG  [es] de Logic Programming Associates y añade 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 por Equipu AI Research, que luego se convirtió en Fril Systems Ltd. El nombre Fril era originalmente un acrónimo de Fuzzy Relational Inference Language .

Comparación de Prolog y Fril

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

Tipos

Los tipos básicos en Fril son similares a los de Prolog , con una excepción importante: el tipo de datos compuesto de Prolog es el término , con listas definidas como términos anidados utilizando el .functor; en Fril, el tipo compuesto es la lista en sí, que forma la base para 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 _está reservado para significar "cualquier valor", con múltiples apariciones de _reemplazado por variables distintas.

Sintaxis

Prolog tiene una sintaxis con una cantidad típica 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 de 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 )

Estos son equivalentes a las respectivas construcciones de Prolog:

hecho . conclusión  :- objetivo_1 , ..., objetivo_n .

Por ejemplo, considere 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 se pueden representar 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 se puede eliminar (salvo mediante killla ejecución de una operación de ing en la relación); dicha 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 se puede declarar 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.

He aquí un ejemplo. El siguiente conjunto de hechos:

((mi-menos-que 2 3))((mi-menor-que 8 23))((mi-menos-que 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 sintaxis:

 argumento predicado

Las consultas se envían utilizando esta sintaxis, donde el predicado es ?(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 }

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

Un conjunto continuo ( itype ) enumera números reales y sus grados de pertenencia; la función de grado de pertenencia es la interpolación lineal sobre estas aplicaciones. La sintaxis es la siguiente:

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

donde los valores deben darse en orden no decreciente.

Cada dtype e itype pueden estar restringidos a un universo (un conjunto de valores permitidos). Fril tiene predicados para operaciones de conjuntos difusos (pero no admite directamente el control mediante lógica difusa ). Incluso es posible combinar dtypes e itypes mediante algunas operaciones, siempre que los dtypes contengan solo números reales.

Pares de apoyo

Cualquier regla puede tener un intervalo de probabilidad (llamado par de soporte) asociado a ella mediante la adición de valores , donde min y max son las probabilidades mínima y máxima. Fril incluye predicados que calculan el soporte para una consulta determinada.:(min max)

Disyunción

Mientras que Prolog utiliza 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 simple tiene ventajas y desventajas. Por el lado positivo, hace innecesarios predicados como el de Prolog =..(que asigna listas y cláusulas), ya que una cláusula es una lista. Por otro lado, es 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:

Referencias

Enlaces externos