ichiban/prolog
est un interpréteur ISO Prolog intégrable dans Go .
database/sql
prologue | otto | go-lua | |
---|---|---|---|
Langue | Prologue ISO | Script ECMA | Lua |
Paradigme | ? Logique | Orienté objet | Orienté objet |
Aller à l'API | ? database/sql -like | original | original |
Déclaratif | ✅ | ||
Bac à sable | ✅ | ✅ |
go get -u github.com/ichiban/prolog
p := prolog . New ( os . Stdin , os . Stdout ) // Or `prolog.New(nil, nil)` if you don't need user_input/user_output.
Ou, si vous souhaitez un interpréteur sandbox sans prédicats intégrés :
// See examples/sandboxing/main.go for details.
p := new (prolog. Interpreter )
if err := p . Exec ( `
human(socrates). % This is a fact.
mortal(X) :- human(X). % This is a rule.
` ); err != nil {
panic ( err )
}
Semblable à database/sql
, vous pouvez utiliser un espace réservé ?
pour insérer des données Go en tant que données Prolog.
if err := p . Exec ( `human(?).` , "socrates" ); err != nil { // Same as p.Exec(`human("socrates").`)
panic ( err )
}
sols , err := p . Query ( `mortal(?).` , "socrates" ) // Same as p.Query(`mortal("socrates").`)
if err != nil {
panic ( err )
}
defer sols . Close ()
// Iterates over solutions.
for sols . Next () {
fmt . Printf ( "Yes. n " ) // ==> Yes.
}
// Check if an error occurred while querying.
if err := sols . Err (); err != nil {
panic ( err )
}
Ou, si vous souhaitez rechercher les valeurs des variables pour chaque solution :
sols , err := p . Query ( `mortal(Who).` )
if err != nil {
panic ( err )
}
defer sols . Close ()
// Iterates over solutions.
for sols . Next () {
// Prepare a struct with fields which name corresponds with a variable in the query.
var s struct {
Who string
}
if err := sols . Scan ( & s ); err != nil {
panic ( err )
}
fmt . Printf ( "Who = %s n " , s . Who ) // ==> Who = socrates
}
// Check if an error occurred while querying.
if err := sols . Err (); err != nil {
panic ( err )
}
ichiban/prolog
adhère à la norme ISO et est livré avec les prédicats ISO ainsi que les prédicats Prologue pour Prolog et DCG.
Voir le Wiki pour les directives et les prédicats intégrés.
1pl
est une commande expérimentale de haut niveau permettant de tester le langage par défaut et sa conformité à la norme ISO.
Vous pouvez l'installer avec go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
Ensuite, vous pouvez accéder au niveau supérieur avec 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
Distribué sous licence MIT. Voir LICENSE
pour plus d’informations.
Voir ARCHITECTURE.md
pour les détails de l'architecture.
Nous tenons à remercier les personnes suivantes pour leur contribution à ce projet :
Nous sommes reconnaissants du soutien et des contributions de toutes les personnes impliquées dans ce projet. Arigatou gozaimasu !