ichiban/prolog
adalah juru bahasa ISO Prolog yang dapat disematkan di Go .
database/sql
-seperti Go APIprolog | otto | pergi-lua | |
---|---|---|---|
Bahasa | Prolog ISO | Skrip ECMA | Lua |
Paradigma | ? Logika | Berorientasi objek | Berorientasi objek |
Buka API | ? database/sql -seperti | asli | asli |
Deklaratif | ✅ | ||
Kotak pasir | ✅ | ✅ |
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.
Atau, jika Anda menginginkan penerjemah sandbox tanpa predikat bawaan:
// 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 )
}
Mirip dengan database/sql
, Anda dapat menggunakan placeholder ?
untuk memasukkan data Go sebagai data 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 )
}
Atau, jika Anda ingin menanyakan nilai variabel untuk setiap solusi:
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
menganut standar ISO dan hadir dengan predikat ISO serta predikat Prolog untuk Prolog dan DCG.
Lihat Wiki untuk arahan dan predikat bawaan.
1pl
adalah perintah tingkat atas eksperimental untuk menguji bahasa default dan kepatuhannya terhadap standar ISO.
Anda dapat menginstalnya dengan go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
Kemudian, Anda dapat memasuki level teratas dengan 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
Didistribusikan di bawah lisensi MIT. Lihat LICENSE
untuk informasi lebih lanjut.
Lihat ARCHITECTURE.md
untuk detail arsitektur.
Kami ingin mengucapkan terima kasih kepada pihak-pihak berikut atas kontribusinya terhadap proyek ini:
Kami berterima kasih atas dukungan dan kontribusi semua orang yang terlibat dalam proyek ini. Arigatou gozaimasu!