usar portable online inteligencia elementos descargar descarga como artificial prolog

portable - prolog online



Array Univ var([x, y]=.. T)-prólogo (2)

Esto sucede porque la representación de la lista en prolog es una estructura de árbol, como esta. Su nodo superior es un "punto", el lado izquierdo es Cabeza y luego un punto a la derecha si la cola no está vacía y la cabeza en el lado izquierdo y "punto" en el lado derecho. Cuando haces esto, simplemente estás creando un predicado (bueno, no un predicado exacto, pero a veces se necesita como muestro un ejemplo): supongamos que escribo:

V=..[somefunctor,X,Y,Z]

Entonces construirá automáticamente un predicado como este:

somefunctor(X,Y,Z).

Ahora ¿Por qué necesitamos esto? Supongamos que llamo a un predicado con estos términos: predicate(somefunctor,term,term2,term3) y predicate o rule se ve algo como esto: predicate(X,Y,Z,T) y te pido que no importa qué predicado esté en X , tienes que llamar a este predicado con los parámetros Y,Z,T Puede ser que pienses que llamas a ese predicado escribiendo de esta manera: X(Y,Z,T) pero desafortunadamente no está permitido en prólogo, así que aquí puedes usar V = .. [X, Y, Z, T] donde X debe colocarse como primer argumento porque es el nombre del predicado y como resultado se obtiene algo como esto: V = somefunctor(term,term2,term3) y esto ocurre internamente. Para invocar este predicado, utiliza el predicado de llamada:

call(V) where `call/1` is a metapredicate and `V=..` is a not logical predicate.

Vi una pregunta preguntando qué hace [a,b,c]=..L. regreso. Al probar esto, vi que devuelve: L = [''.'', a, [b, c]] .

No puedo entender por qué sucede esto, no pude entender la naturaleza de Univ de la documentación . Comprender esto me ayudará a entender Univ.


Una forma de aprender más sobre los términos es usar write_canonical/1 en un sistema Prolog conforme.

Por ejemplo, con GNU Prolog, obtenemos:

| ?- write_canonical([x,y]). ''.''(x,''.''(y,[]))

Esta espectáculos:

  1. el functor primario en este término es ''.'' , con arity 2
  2. el primer argumento es x
  3. el segundo argumento es ''.''(y, []) , que es la lista [y]

Esto explica por qué (=..)/2 cede:

| ?- [x,y] =.. Ls. Ls = [''.'',x,[y]]

y también tu otro ejemplo.