Hmmm, vediamo. Gli elementi più fondamentali dei linguaggi di programmazione sono stato, flusso di controllo e calcolo. La programmazione logica comprende molto di questo in una singola operazione molto potente: l'unificazione.
Invece di stato (variabili globali) che viene modificato tramite assegnazioni, si enfatizzano le variabili locali a assegnazione singola che ricevono valori attraverso l'unificazione con altre strutture. Il flusso di controllo è espresso attraverso parole chiave come if
o while
; ma Prolog ha solo un operatore di regola di unificazione generale ( :-
) che definisce quando tentare l'unificazione e di cosa. Invece di cicli con while
, in genere si utilizzano i predicati che si chiamano; questo dà risultati simili come loop, e con una certa cura è altrettanto efficiente (anche se più confuso per molti studenti). Anche il flusso di controllo più basilare - il sequenziamento delle operazioni - non è tecnicamente un costrutto di sequenziamento, ma un operatore logico AND
( ,
) che si verifica solo per garantire una valutazione da sinistra a destra. Infine, il calcolo viene anche eseguito di solito dall'unificazione piuttosto che dagli operatori, ad es. per operazioni di lista o vincoli di destrutturazione. Anche l'aritmetica può essere fatta attraverso l'unificazione se si usano i numeri di Peano, sebbene questo sia certamente ingombrante, e Prolog ha anche un escape hatch nella normale valutazione aritmetica con is
(ma ciò infrange la trasparenza referenziale e va un po 'contro lo spirito del sistema) . La maggior parte del programma Prolog non banale utilizza molti o tutti questi elementi.
Prendi il semplice compito "rovesciare un elenco": quasi tutte le soluzioni che vedi mai usano l'unificazione al posto dei "se" che useresti in altre lingue, distruggendo il binding per manipolare gli elenchi, la ricorsione per generalizzare da un unico elenco di elementi in liste arbitrarie e ,
per sequenziare il passo ricorsivo e il passo di combinazione. In ultima analisi, usano ancora i fondamenti dell'informatica come "IF" o "A, THEN B", ma sono tutti espressi nel mezzo di termini combinati tramite unificazione, dato potere arbitrario attraverso la ricorsione. È infatti sorprendentemente difficile trovare un predicato istruttivo che non usi la ricorsione in qualche modo. Se hai un esempio di un problema che non riesci a vedere come risolverlo, scrivilo per favore.