prolog
v1.2.2
ichiban/prolog
Go 에 내장 가능한 ISO Prolog 해석기입니다.
database/sql
과 유사한 Go API프롤로그 | 장미유 | 고루아 | |
---|---|---|---|
언어 | 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 조건자뿐 아니라 Prolog용 Prologue 및 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
참조하세요.
이 프로젝트에 기여해 주신 다음 분들께 감사의 말씀을 전하고 싶습니다.
이 프로젝트에 참여한 모든 분들의 지원과 기여에 감사드립니다. 아리가토 고자이마스!