[Prolog] Query vraag

Pagina: 1
Acties:

  • Error323
  • Registratie: December 2001
  • Laatst online: 03-02 08:58
Hey Mensen,

Voor de (swi) prolog kenners onder ons. Start eens een prolog sessie en
geef hem de volgende query:
code:
1
X = f(X).

Kan iemand mij een verklaring geven voor de output van deze query?
Ik ben echt radeloos, kom er maar niet uit. Ik kan niet eens een redenatie
geven die ook maar een deel kan verklaren.

bvd,

:: Error.

github.com/Error323


Verwijderd

Omdat Prolog X zelf met iets anders matcht.

Als je:

code:
1
2
f(1).
f(2).


in je KB zet, dan geeft f(X) je: f(1) en f(2)

wat wil je eigenlijk bereiken met X = f(X).?

[ Voor 15% gewijzigd door Verwijderd op 01-12-2005 23:56 ]


  • Error323
  • Registratie: December 2001
  • Laatst online: 03-02 08:58
Ja dat snap ik, maar je mag geen database gebruiken, dan krijg je de volgende output :

X = f(**)

En DAT snap ik niet.

github.com/Error323


  • Error323
  • Registratie: December 2001
  • Laatst online: 03-02 08:58
Wat ik wil bereiken is het snappen van het antwoord op deze query.

github.com/Error323


Verwijderd

Error323 schreef op donderdag 01 december 2005 @ 23:56:
... de volgende output :

X = f(**)

En DAT snap ik niet.
Als X = f(X), is X dan X of f(X)? Als X = f(X), dan:
X = f(f(X)) en X = f(f(f(X))) enz.

en waarschijnlijk toont jouw interpreter dat als f(**). Zoek anders even op occurs-check.

[ Voor 8% gewijzigd door Verwijderd op 02-12-2005 00:08 ]


  • Error323
  • Registratie: December 2001
  • Laatst online: 03-02 08:58
Verwijderd schreef op vrijdag 02 december 2005 @ 00:06:
[...]


Als X = f(X), is X dan X of f(X)? Als X = f(X), dan:
X = f(f(X)) en X = f(f(f(X))) enz.

en waarschijnlijk toont jouw interpreter dat als f(**). Zoek anders even op occurs-check.
Aha dankje, het zoeken op occurs-check heeft veel geholpen. M'n interpreter heeft me in
de war gebracht. Het is een recursieve aanroep van f/1. Alleen normaal geeft m'n interpreter
dan de volgende waarschuwing :
% ... 1,000,000 ............ 10,000,000 years later
%
% >> 42 << (last release gives the question)
Nu gaf die dus de X = f(**). Met de bedoeling dat f(X) oneindig word herhaalt.

dankje!!!

github.com/Error323


  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 07:26
offtopic:
Ook prolog @ KI @ UvA van Ulle?

Verbouwing

Pagina: 1