[prolog] unique operator.

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Weet iemand of er een unique operator ofzo is binnen prolog? (In al mijn prolog boeken/documentatie ben ik nog niet zoiets tegengekomen). Dus dat je equals niet zozeer laats plaats vinden door structuren te vergelijken, maar alleen als de terms hetzelfde (object) zijn. En het is ook niet dat ik niet zelf iets kan bedenken, maar hou met toch liever aan een standaard voor zover die er is.

[ Voor 36% gewijzigd door Alarmnummer op 31-12-2003 15:37 ]


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:03
(Het gestandaardiseerde deel van) Prolog is een heel beperkte programmeertaal, dus ik ben bang dat wat je wil niet kan. Uit interesse; hoe had je het je eigenlijk precies voorgesteld en wat was je er mee van plan? Het verschil lijkt me namelijk vanuit een typisch Prolog perspectief helemaal niet aanwezig.

Verwijderd

Hoe kun je Prolog eigenlijk het beste omschrijven? Wát is het precies?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
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.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 31 december 2003 @ 22:07:
Hoe kun je Prolog eigenlijk het beste omschrijven? Wát is het precies?
Prolog is vloeken in de kerk voor een imperatieve programmeur ;)

Prolog is een logische programmeertaal waarin erg veel door de prolog-engine wordt gedaan zoals backtracking. Hierdoor kan je voor bepaalde problemen zeer fraaie en goed te lezen algortimes schrijven zonder dat ze ondersneeuwen in de code.

code:
1
2
3
4
5
6
7
8
parent(tom,pat).
parent(pat,ann).
parent(ann,miep).
parent(miep,karen).
parent(karen,rambo).

ancestor(X,Y):-parent(X,Y).
ancestor(X,Y):-parent(X,Z),parent(Z,Y).


In dit voorbeeld bepaald je of X een ancestor is van Y. Je ziet dat het algoritme echt ongelovelijk clean is, probeer het maar eens te schrijven in imperatieve taal zoals java.

Als je er eens mee wilt spelen, kun je misschien even kijken naar SWI-Prolog. Hierbij zit een kleine ide waarmee je snel uit de voeten kan. Je moet echt even met Prolog gaan spelen om de waarde ervan in te zien.

Verwijderd

Ah, daar hebben we Alarmnummer weer - de Prolog goeroe :D !

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
*kick*

Zijn er helemaal geen prolog lovers hier? :)

Verwijderd

Volgens mij is het binnen prolog niet mogelijk om naar iets als pointers te kijken, is ook geen enkele reden toe volgens mij.
Mijn oplossing zou zijn om een "zaak nummer" te koppelenen.
zodat je aan de hand van het zaak nummer kan kijken of ze hetzelfde zijn.

Kan zijn dat ik er helemaal naast zit maar ik volg de uitleg van het probleem niet helemaal ;)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 05 januari 2004 @ 10:03:
Volgens mij is het binnen prolog niet mogelijk om naar iets als pointers te kijken
Wel als je zelf een prolog intepreter schrijft :) Ik schrijf een prolog variant : prolaw die gebruikt gaat worden voor redeneren voor de wetgeving, en redenaties over die redenanties (meta redeneren).
Mijn oplossing zou zijn om een "zaak nummer" te koppelenen.
zodat je aan de hand van het zaak nummer kan kijken of ze hetzelfde zijn.
Hier had ik ook al aan gedacht, maar dan moet je een andere notatie handhaven en ik vond dat met dat apestaartje juist zo handig.

[ Voor 5% gewijzigd door Alarmnummer op 05-01-2004 11:07 ]


  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 26-05 15:42

Altaphista

1. check manual, 2. ask

Weet onze Prolog goeroe/docent Piter het niet ;)

Je gaat het pas zien als je het doorhebt.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Altaphista schreef op 05 januari 2004 @ 11:23:
Weet onze Prolog goeroe/docent Piter het niet ;)
Ik neem aan dat hij niet veel afweet van compiler/interpreter bouw. Oja.. dit is trouwens een stukje software dat ik schrijf voor mijn afstudeerscriptie, dus hij kan er denk ik wel van smullen ;)

[offtopic]
Aangezien jij in groningen hebt gestudeerd, neem ik aan dat je er nog steeds in de buurt woont. Ben je verder gaan leren? of ben je aan het werk gegaan? De it-markt is op dit moment naadje en in groningen is het sowieso altijd lastiger. Heb jij al een beetje gekeken op de arbeidsmarkt? *contract loopt een dezer dagen af*.

[ Voor 58% gewijzigd door Alarmnummer op 05-01-2004 11:37 ]


Verwijderd

Alarmnummer schreef op 04 januari 2004 @ 16:41:
*kick*

Zijn er helemaal geen prolog lovers hier? :)
Ik moet een Prolog adventuregame maken voor school :)

Verwijderd

als je zelf de prolog interperter dan zou je zelf in c, als je daar de interperter in schrijft, het unique predicaat kunnen defineren, swi-prolog doet dit ook voor een hele hoop predicaten die anders heel inefficient zouden zijn of helemaal niet konden, denk aan sort en/of write_nl

  • Altaphista
  • Registratie: Juli 2001
  • Laatst online: 26-05 15:42

Altaphista

1. check manual, 2. ask

Alarmnummer schreef op 05 januari 2004 @ 11:25:
[...]

[offtopic]
Aangezien jij in groningen hebt gestudeerd, neem ik aan dat je er nog steeds in de buurt woont. Ben je verder gaan leren? of ben je aan het werk gegaan? De it-markt is op dit moment naadje en in groningen is het sowieso altijd lastiger. Heb jij al een beetje gekeken op de arbeidsmarkt? *contract loopt een dezer dagen af*.
Ja ik ben aan het werk bij een (vrij jong) ICT-bedrijf in Groningen. Kon er direct aan de slag na mijn afstudeeropdracht daar te hebben gedaan, dus geen ervaring met arbeidsmarkt verder...

Je gaat het pas zien als je het doorhebt.


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Altaphista schreef op 06 januari 2004 @ 09:28:
[...]


Ja ik ben aan het werk bij een (vrij jong) ICT-bedrijf in Groningen. Kon er direct aan de slag na mijn afstudeeropdracht daar te hebben gedaan, dus geen ervaring met arbeidsmarkt verder...
Als ze nog personeel nodig hebben, geef ff een gil :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Verwijderd schreef op 06 januari 2004 @ 07:56:
als je zelf de prolog interperter dan zou je zelf in c, als je daar de interperter in schrijft, het unique predicaat kunnen defineren, swi-prolog doet dit ook voor een hele hoop predicaten die anders heel inefficient zouden zijn of helemaal niet konden, denk aan sort en/of write_nl
Ik schrijf het in java, maar het is geen probleem om de == te gebruiken voor pointer vergelijkingen. Maar ik zie dus dat er geen standaard voor is, dus ik ga de techniek gebruiken zoals die in het compiler boek van Appel beschreven staat. Ik denk dat ik er verder wel uitkom, maar eerst ff checken of er wel een standaard voor was.

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Verwijderd schreef op 05 januari 2004 @ 23:41:
[...]


Ik moet een Prolog adventuregame maken voor school :)
offtopic:
Laat me raden, CKI @ UU? Des Tombe?
Pagina: 1