Ricerca…


Macchina astratta

Per efficienza, il codice Prolog viene in genere compilato per astrarre il codice macchina prima che venga eseguito.

Sono state proposte molte diverse architetture e varianti di macchine astratte per l'esecuzione efficiente dei programmi Prolog. Questi includono:

  • WAM , la macchina astratta di Warren
  • TOAM , una macchina astratta usata in B-Prolog.
  • ZIP , utilizzato ad esempio come base per la VM di SWI-Prolog
  • VAM , un'architettura di ricerca sviluppata a Vienna.

indicizzazione

Tutti gli interpreti Prolog ampiamente utilizzati utilizzano l' indicizzazione degli argomenti per selezionare in modo efficiente le clausole appropriate.

Gli utenti possono tipicamente fare affidamento almeno sull'argomento del primo argomento , il che significa che le frasi possono essere efficacemente distinte dal funtore e dall'aritma del termine più esterno del primo argomento. Nelle chiamate in cui tale argomento è sufficientemente istanziato, le clausole di corrispondenza possono essere essenzialmente selezionate in tempo costante tramite hashing su quell'argomento.

Più recentemente, l' indicizzazione JIT è stata implementata in più sistemi, consentendo l'indicizzazione dinamica su qualsiasi argomento che sia sufficientemente istanziato quando viene chiamato il predicato.

Ottimizzazione della chiamata di coda

Praticamente tutti i sistemi Prolog implementano l' ottimizzazione chiamata coda (TCO). Ciò significa che le chiamate di predicato che si trovano in una posizione di coda possono essere eseguite nello spazio di stack costante se il predicato è deterministico.

L'ottimizzazione della ricorsione in coda (TRO) è un caso speciale di ottimizzazione della chiamata di coda.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow