[ProLOG] Arithmetic probleem

Pagina: 1
Acties:

  • Scyth
  • Registratie: Juli 2001
  • Laatst online: 16-03-2024

Scyth

Fat finger, three beer

Topicstarter
Ik ben een beetje ProLOG aan het bekijken, ook omdat ik dit moet doen voor school, maar ook buiten huiswerkopdrachten om wil ik d'r iets meer van weten. Nu is hetgene wat ik nu vraag geen huiswerkopdracht, dus wees gerust ;)

Ik gebruik SWI-Prolog 5.6.23 (de laatste versie downloadbaar dus)

Als ik een simpele knowledge base aanmaak met het volgende er in:
code:
1
increment(X,Y) :- X is Y+1.

dan werkt dit maar half.
Als ik aanroep met "increment(X,4)." krijg ik netjes X=5 terug, maar als ik aanroep met "increment(4,X)." krijg ik dit:
code:
1
2
ERROR: is/2: Arguments are not sufficiently instantiated
^  Exception: (8) 4 is _G279+1

Waarom werkt dit niet zoals ik verwacht dat het werkt?

Dell Studio XPS 16
Project: BavBierSub 1.0 BavBierSub 2.0


  • DroogKloot
  • Registratie: Februari 2001
  • Niet online

DroogKloot

depenisvanjezus

Omdat dat logisch gezien iets anders betekent. ;) Als je increment/2 aanroept met:

code:
1
increment(X, 4).


Dan maakt Prolog er dit van:

code:
1
X is 4 + 1.


En dat slaagt. Gebruik je echter deze aanroep:

code:
1
increment(4, X).


Dan zal Prolog er dit van maken:

code:
1
4 is <X: ongeinstantieerd> + 1.


En die query kan niet uitgevoerd worden, variabelen die aan de rechterkant van de "is" operator voorkomen moeten tijdens evaluatie al een waarde hebben gekregen.

[ Voor 21% gewijzigd door DroogKloot op 21-11-2006 15:56 ]