tutorial sintaxis portable online elementos ejemplos descargar prolog

sintaxis - prolog tutorial



Prólogo. Estructura(término complejo) versus predicado, realmente no entiendo la diferencia (1)

En Prolog, un término es un término constante, átomo, variable o compuesto .

Un término compuesto consiste en un functor con 1 o más argumentos . Los siguientes son términos :

a. % a term with functor ''a'' and 0 arguments a(b,c). % a term with functor ''a'' and 2 arguments, b and c

La lista vacía [] es un término y, más específicamente, un átomo . Una lista [H|T] se representa intrínsecamente como ''.''(H, T) y es, por lo tanto, un término compuesto y, por lo tanto, también un término .

También puede tener términos compuestos más complejos:

a(b(c,d), e(f,g(h)))

Aquí, a es un funtor con dos argumentos: b(c,d) y e(f,g(h)) , y así sucesivamente.

Un término compuesto también se puede llamar una estructura, ya que le dan una forma de estructurar los hechos:

customer(name(john,doe), address(street(''123 Main St''), city(''Framusville''), ...), ...).

Una cláusula predicativa es una estructura o término específico. En Prolog, todo es una estructura o término de la forma: functor(arg1, arg2, ...) .

Veamos la cláusula predicativa:

f(X) :- a(X).

Es en sí misma una estructura que internamente se representa como este término : :-(f(X), (a(X))) . El punto ( . ) Es un terminador. Lo que lo convierte en un predicado , como @false indica, es:

  • Está en el "nivel superior" (no es un argumento en un término de nivel superior)

  • Es functor es :-

Una cláusula predicativa también se conoce como una regla ya que el término, :-(A, B) define la relación : A es verdadero si B es verdadero . El término f(X) se conoce como el encabezado de la cláusula predicativa.

Una colección de una o más cláusulas predicativas que tienen el mismo funtor y arity (número de argumentos) para sus cabezas se conoce como predicado .

Mirando tu segundo ejemplo:

jealous(X,Y) :- loves(X,Z), loves(Y,Z).

Esta es también una cláusula predicativa para el predicado jealous/2 (el predicado cuyo functor es jealous y tiene arity de 2). Se expresaría internamente como este término compuesto : :-(jealous(X,Y), '',''(loves(X,Z), loves(Y,Z))) . Esto significa que la expresión anterior también es un término compuesto .

Puede ver cómo Prolog ve una expresión en su forma canónica usando write_canonical/1 :

| ?- write_canonical((jealous(X,Y) :- loves(X,Z), loves(Y,Z))). :-(jealous(_17,_18),'',''(loves(_17,_22),loves(_18,_22)))

El sitio de SWI Prolog tiene un muy buen glosario de términos Prolog .

Soy nuevo en Prolog y no puedo entender la diferencia entre una estructura y un predicado. Hay realmente alguna diferencia?

Mientras buscaba, encontré que algunas personas consideran que f (X): - a (X) es un predicado y algunos lo consideran celoso (X, Y): - ama (X, Z), ama (Y, Z) para ser un estructura (o un término complejo). Se ven más o menos igual para mí.

Alguien se preocupa por explicar?