ichiban/prolog
é um interpretador ISO Prolog incorporável em Go .
database/sql
prólogo | otto | go-lua | |
---|---|---|---|
Linguagem | Prólogo ISO | Script ECMA | Lua |
Paradigma | ? Lógica | Orientado a objetos | Orientado a objetos |
Ir API | ? database/sql | original | original |
Declarativo | ✅ | ||
Caixa de areia | ✅ | ✅ |
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, se você quiser um interpretador sandbox sem predicados integrados:
// 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 )
}
Semelhante a database/sql
, você pode usar placeholder ?
para inserir dados Go como dados 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, se quiser consultar os valores das variáveis para cada solução:
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
adere ao padrão ISO e vem com os predicados ISO, bem como o Prologue para os predicados Prolog e DCG.
Veja o Wiki para as diretivas e os predicados integrados.
1pl
é um comando experimental de nível superior para testar o idioma padrão e sua conformidade com o padrão ISO.
Você pode instalá-lo com go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
Então, você pode entrar no nível superior com 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
Distribuído sob a licença do MIT. Consulte LICENSE
para obter mais informações.
Consulte ARCHITECTURE.md
para detalhes de arquitetura.
Gostaríamos de estender nossos agradecimentos às seguintes pessoas por suas contribuições para este projeto:
Agradecemos o apoio e contribuições de todos os envolvidos neste projeto. Arigatou gozaimasu!