ichiban/prolog
ist ein in Go einbettbarer ISO-Prolog- Interpreter.
database/sql
-ähnliche Go-APIProlog | Otto | go-lua | |
---|---|---|---|
Sprache | ISO-Prolog | ECMA-Skript | Lua |
Paradigma | ? Logik | Objektorientiert | Objektorientiert |
Gehen Sie zur API | ? database/sql -ähnlich | Original | Original |
Deklarativ | ✅ | ||
Sandboxen | ✅ | ✅ |
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.
Oder wenn Sie einen Sandbox-Interpreter ohne integrierte Prädikate wünschen:
// 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 )
}
Ähnlich wie bei database/sql
können Sie den Platzhalter „ ?
um Go-Daten als Prolog-Daten einzufügen.
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 )
}
Oder wenn Sie die Variablenwerte für jede Lösung abfragen möchten:
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
hält sich an den ISO-Standard und wird mit den ISO-Prädikaten sowie dem Prologue für Prolog- und DCG-Prädikate geliefert.
Die Anweisungen und die integrierten Prädikate finden Sie im Wiki.
1pl
ist ein experimenteller Befehl der obersten Ebene zum Testen der Standardsprache und ihrer Konformität mit dem ISO-Standard.
Sie können es mit go install
installieren:
go install github.com/ichiban/prolog/cmd/1pl@latest
Dann können Sie mit 1pl
in die oberste Ebene einsteigen:
$(go env GOPATH)/bin/1pl [<file>...]
Wird unter der MIT-Lizenz vertrieben. Weitere Informationen finden Sie unter LICENSE
.
Einzelheiten zur Architektur finden Sie unter ARCHITECTURE.md
.
Wir möchten uns bei den folgenden Personen für ihren Beitrag zu diesem Projekt bedanken:
Wir sind dankbar für die Unterstützung und Beiträge aller an diesem Projekt Beteiligten. Arigatou gozaimasu!