Ik wil verhinderen dat bij het pattern matching alle terms worden opgehaald die voldoen. Hierdoor kan ik eigenschappen aan 1 bepaalde term koppelen, terwijl die term qua structuur volledig identiek kan zijn aan een andere. Ik wil het gebruiken om meta-data aan terms te koppelen (wat ook weer normale facts zijn).
vb:
code:
1
2
3
4
5
| schuldig:-moord_gepleegd
@instantie(rechtbank).
schuldig:-moord_gepleegd
@instantie(rechter). |
Dit kan je eigelijk gewoon als 2 rules en 2 facts:
schuldig:-moord_gepleegd
schuldig:-moord_gepleegd
@instantie(schuldig:-moord_gepleegd,rechtbank).
@instantie(schuldig:-moord_gepleegd,rechter).
Als ik dan de meta-data van regel 1 wil ophalen, zijn de onderste beide facts bruikbaar, en dat wil ik dus verhinderen.
Verder heb ik dit unique operator uit het compiler boek van Appel. Daarin plaats hij een unique operator om een type-structuur om te verhinderen dat je een structurele vergelijking gaat uitvoeren, maar dat je het gewoon doet op pointer-vergelijking.
Bij het unifyen moet je algortime dus rekening gaan houden met die unique operator.