Zoeken…


Abstracte machine

Voor efficiëntie wordt Prolog-code meestal gecompileerd om abstracte machinecode samen te vatten voordat deze wordt uitgevoerd.

Veel verschillende abstracte machine-architecturen en varianten zijn voorgesteld voor een efficiënte uitvoering van Prolog-programma's. Waaronder:

  • WAM , de Warren abstracte machine
  • TOAM , een abstracte machine die wordt gebruikt in B-Prolog.
  • ZIP , bijvoorbeeld gebruikt als basis voor de VM van SWI-Prolog
  • VAM , een onderzoeksarchitectuur ontwikkeld in Wenen.

Indexeren

Alle veelgebruikte Prolog-tolken gebruiken argumentindexering om op efficiënte wijze geschikte clausules te selecteren.

Gebruikers kunnen meestal vertrouwen op ten minste eerste argumentindexering , wat betekent dat clausules efficiënt kunnen worden onderscheiden door de functor en de ariteit van de buitenste term van het eerste argument. In aanroepen waarbij dat argument voldoende wordt geïncretiseerd, kunnen matchingclausules in wezen in constante tijd worden geselecteerd via hashing op dat argument.

Meer recent is JIT-indexering in meer systemen geïmplementeerd, waardoor dynamische indexering mogelijk is voor elk argument dat voldoende wordt geïnstantieerd wanneer het predicaat wordt aangeroepen.

Tail call optimalisatie

Vrijwel alle Prolog-systemen implementeren Tail Call Optimization (TCO). Dit betekent dat predikaataanroepen die zich in een staartpositie bevinden, in constante stapelruimte kunnen worden uitgevoerd als het predikaat deterministisch is.

Tail recursion optimization (TRO) is een speciaal geval van tail call-optimalisatie.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow