ichiban/prolog
— это встраиваемый интерпретатор ISO Prolog в Go .
database/sql
пролог | отто | го-луа | |
---|---|---|---|
Язык | ISO-пролог | ECMA-скрипт | Луа |
Парадигма | ? Логика | Объектно-ориентированный | Объектно-ориентированный |
Перейти API | ? 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, а также предикатами Prologue для 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
.
Мы хотели бы выразить нашу благодарность следующим людям за их вклад в этот проект:
Мы благодарны за поддержку и вклад всем, кто участвует в этом проекте. Аригато годзаимасу!