Poiché Prolog = Unificazione sintattica + Concatenamento all'indietro + REPL
Tutte e tre le parti si trovano nell'intelligenza artificiale: strutture e strategie per la risoluzione di problemi complessi di George F. Luger. Nella quarta edizione del libro tutte e tre le parti sono implementate in LISP nella sezione 15.8, Programmazione logica in LISP. Mette anche lo stesso codice negli altri suoi libri, ma non li ho tutti per aver notato qui. Il codice per i suoi libri può essere trovato qui .
Un'altra fonte con tutte e tre le parti può essere trovata nei paradigmi della programmazione dell'intelligenza artificiale: casi studio in Common Lisp di Peter Norvig. Vedere i capitoli 11, Programmazione logica e 12, Compilazione dei programmi di logica. Il codice per il suo libro può essere trovato qui .
Un'altra fonte è la struttura e l'interpretazione dei programmi per computer di Hal Abelson, Jerry Sussman e Julie Sussman. Vedere la sezione 4.4 Programmazione logica. Il sito per il libro è qui e il codice per il libro è qui .
Non è raro trovare l'algoritmo di unificazione con back chaining implementato in molte applicazioni se sai dove cercare; è particolarmente prevalente nell'inferenza di tipo nei compilatori funzionali. L'uso delle parole chiave unificazione o verifica aiuta a individuare le funzioni. Inoltre, la maggior parte delle implementazioni usa unif per il nome della funzione di unificazione.
Per una versione di Prolog, meno la REPL, eseguita in OCaml, consultare Codice e risorse per "Manuale di logica pratica e ragionamento automatico" - prolog.ml
Una traduzione del codice libro in F # è disponibile qui . Una traduzione del codice libro per Haskell è disponibile qui .
In termini di ricerca del codice, l'algoritmo di unificazione è più facile da trovare, quindi implementazioni con back chaining incorporate nelle applicazioni. Trovare un'implementazione pienamente funzionale di Prolog in un linguaggio funzionale con un REPL è il più difficile. Il più delle volte il codice non è in un formato per l'uso diretto all'interno di PROLOG; è fortemente personalizzato per migliorare le prestazioni, quindi potresti trovare il codice ma non varrà la pena pagare per prendere in giro le parti che desideri. Il mio consiglio sarebbe di leggere il libro di Luger e di costruirlo da zero nella tua lingua preferita, anche se ciò significa installare e apprendere LISP e tradurre per farlo.
MODIFICARE
Poiché questa è una domanda duplicata da StackOverflow e l'OP è nuovo e nei commenti dice:
Per dare più contesto, sto tentando di implementare l'inferenza di tipo, tuttavia le intricate funzionalità nel sistema di tipi del mio linguaggio (tipi dipendenti, tipi di perfezionamento, tipizzazione lineare per citarne alcuni di quelli meno comuni) mi fanno sentire che sarebbe essere utile per basare la mia inferenza di tipo sugli algoritmi che guidano Prolog in modo da ottenere un algoritmo molto generale. Noterò che sono completamente autodidatta, quindi la mia conoscenza è carente in grandi aree.
Espanderò qui, ma mi rendo conto che l'OP dovrebbe porre una nuova domanda.
Per alcune informazioni introduttive, consultare l' inferenza del tipo di implementazione .
Il miglior libro che conosco su questo argomento è Tipi e linguaggi di programmazione di Benjamin C. Pierce. Il sito del libro è qui . Le risorse con collegamenti al codice OCaml sono qui . E recentemente è iniziata ma la traduzione per lo più completa di questo in F # è qui .
Tipi dipendenti: pag. 462 Tipi di affinamento: pag. 207 Logica lineare e sistemi di tipi: pag. 109