ichiban/prolog
เป็นล่าม ISO Prolog ที่ฝังได้ใน Go
database/sql
เหมือน Go APIอารัมภบท | อ็อตโต | โก-ลัวะ | |
---|---|---|---|
ภาษา | ISO อารัมภบท | สคริปต์ ECMA | ลัวะ |
กระบวนทัศน์ | - ตรรกะ | เชิงวัตถุ | เชิงวัตถุ |
ไปที่ API | - database/sql -like | ต้นฉบับ | ต้นฉบับ |
ประกาศ | |||
แซนด์บ็อกซ์ |
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.
หรือ หากคุณต้องการล่ามแซนด์บ็อกซ์ที่ไม่มีเพรดิเคตในตัว:
// 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 )
}
คล้ายกับ database/sql
คุณสามารถใช้placeholder ?
เพื่อแทรกข้อมูล Go เป็นข้อมูล 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 )
}
หรือถ้าคุณต้องการค้นหาค่าตัวแปรสำหรับแต่ละโซลูชัน:
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
เป็นไปตามมาตรฐาน ISO และมาพร้อมกับภาคแสดง ISO รวมถึงภาคแสดง Prolog และ DCG
ดู Wiki สำหรับคำสั่งและเพรดิเคตในตัว
1pl
เป็นคำสั่งระดับทดลองระดับบนสุดสำหรับทดสอบภาษาเริ่มต้นและความสอดคล้องกับมาตรฐาน ISO
คุณสามารถติดตั้งได้ด้วย go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
จากนั้นคุณสามารถเข้าสู่ระดับบนสุดด้วย 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
เผยแพร่ภายใต้ใบอนุญาต MIT ดู LICENSE
สำหรับข้อมูลเพิ่มเติม
ดู ARCHITECTURE.md
สำหรับรายละเอียดสถาปัตยกรรม
เราอยากจะขอขอบคุณบุคคลต่อไปนี้สำหรับการมีส่วนร่วมในโครงการนี้:
เราขอขอบคุณสำหรับการสนับสนุนและการมีส่วนร่วมของทุกคนที่เกี่ยวข้องในโครงการนี้ อาริกาโตะ โกไซมัส!