使用WASM将Trealla Prolog嵌入Go中

127 阅读1分钟

trealla-go GoDoc

import "github.com/trealla-prolog/go/trealla"

使用Trealla PrologWasmer的Go的Prolog接口。 它相当快。虽然没有原生的Trealla那么快,但也是非常快的(比原生的慢2-5倍)。

开发状态: alpha 🤠

注意事项

  • 阿尔法状态,API会改变。
  • 查询是findall'd的,在查询结束前不会返回答案。
  • 在Windows上不工作(wasmer-go问题)。
    • 在WSL上工作很好。
  • 目前,解释器是短暂的,所以你必须在每次查询时重新考虑一切(正在努力)。

使用方法

这个库使用WebAssembly来运行Trealla,在一个隔离的环境中执行Prolog查询:

import "github.com/trealla-prolog/go/trealla"

func main() {
	// load the interpreter and (optionally) grant access to the current directory
	pl := trealla.New(trealla.WithPreopen("."))
	// run a query; cancel context to abort it
	answer, err := pl.Query(ctx, "member(X, [1, foo(bar), c]).")
	// get the second substitution (answer) for X
	x := answer.Solutions[1]["X"] // trealla.Compound{Functor: "foo", Args: ["bar"]}
}