ichiban/prolog
هو مترجم ISO Prolog قابل للتضمين في Go .
database/sql
-مثل Go APIبرولوج | أوتو | اذهب لوا | |
---|---|---|---|
لغة | مقدمة ISO | البرنامج النصي ECMA | لوا |
نموذج | ؟ منطق | كائن المنحى | كائن المنحى |
اذهب إلى واجهة برمجة التطبيقات | ؟ database/sql | إبداعي | إبداعي |
تصريحي | ✅ | ||
وضع الحماية | ✅ | ✅ |
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
، يمكنك استخدام العنصر النائب ?
لإدراج بيانات 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 for Prolog وDCG.
راجع Wiki لمعرفة التوجيهات والمسندات المضمنة.
1pl
هو أمر تجريبي عالي المستوى لاختبار اللغة الافتراضية ومدى امتثالها لمعيار ISO.
يمكنك تثبيته باستخدام go install
:
go install github.com/ichiban/prolog/cmd/1pl@latest
وبعد ذلك، يمكنك الدخول إلى المستوى الأعلى بـ 1pl
:
$(go env GOPATH)/bin/1pl [<file>...]
وزعت بموجب ترخيص معهد ماساتشوستس للتكنولوجيا. راجع LICENSE
لمزيد من المعلومات.
راجع ARCHITECTURE.md
للحصول على تفاصيل الهندسة المعمارية.
ونود أن نتقدم بالشكر إلى الأشخاص التالية أسماؤهم لمساهمتهم في هذا المشروع:
ونحن ممتنون لدعم ومساهمات جميع المشاركين في هذا المشروع. أريجاتو جوزايماسو!