ichiban/prolog
es un intérprete ISO Prolog integrable en Go .
database/sql
prólogo | otón | go-lua | |
---|---|---|---|
Idioma | Prólogo ISO | Guión ECMA | lua |
Paradigma | ? Lógica | Orientado a objetos | Orientado a objetos |
Ir API | ? database/sql -como | original | original |
Declarativo | ✅ | ||
Zona de arena | ✅ | ✅ |
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.
O, si desea un intérprete de zona de pruebas sin 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 )
}
Similar a database/sql
, ¿puedes usar un marcador de posición ?
para insertar datos de Go como datos de 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 )
}
O, si desea consultar los valores de las variables para cada solución:
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
cumple con el estándar ISO y viene con los predicados ISO, así como el Prologue para los predicados Prolog y DCG.
Consulte la Wiki para conocer las directivas y los predicados integrados.
1pl
es un comando experimental de nivel superior para probar el idioma predeterminado y su cumplimiento con el estándar ISO.
Puedes instalarlo con go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
Luego, puedes ingresar al nivel superior con 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
Distribuido bajo licencia MIT. Consulte LICENSE
para obtener más información.
Consulte ARCHITECTURE.md
para obtener detalles sobre la arquitectura.
Nos gustaría extender nuestro agradecimiento a las siguientes personas por sus contribuciones a este proyecto:
Agradecemos el apoyo y las contribuciones de todos los involucrados en este proyecto. Arigatou gozaimasu!