Versions in this module Expand all Collapse all v2 v2.1.1 Dec 19, 2025 v2.1.0 Dec 18, 2025 Changes in this version + func ResetStreamIDCounter() type Promise + func DelDict4(vm *VM, key Term, dictIn Term, value Term, dictOut Term, cont Cont, env *Env) *Promise + func GetDict4(vm *VM, keyPath Term, defaultValue Term, dict Term, result Term, cont Cont, ...) *Promise v2.0.1 Nov 26, 2024 Changes in this version + var AtomPanicError = NewAtom("panic_error") v2.0.0 Nov 25, 2024 Changes in this version + var ErrMaxVariables = errors.New("maximum number of variables reached") + func CompareAtomic[T Term](a T, t Term, cmp func(T, T) int, env *Env) int + func CompareCompound(c Compound, t Term, env *Env) int + func WriteCompound(w io.Writer, c Compound, opts *WriteOptions, env *Env) error + type Atom string + func NewAtom(name string) Atom + func NewAtomRune(v rune) Atom + func (a Atom) Apply(args ...Term) Term + func (a Atom) Compare(t Term, env *Env) int + func (a Atom) String() string + func (a Atom) WriteTerm(w io.Writer, opts *WriteOptions, _ *Env) error + type Compound interface + Arg func(n int) Term + Arity func() int + Functor func() Atom + type Cont func(*Env) *Promise + type Dict interface + All func() iter.Seq2[Atom, Term] + At func(i int) (Atom, Term, bool) + Len func() int + Tag func() Term + Value func(key Atom) (Term, bool) + func NewDict(args []Term) (Dict, error) + type Env struct + func NewEnv() *Env + func (e *Env) Resolve(t Term) Term + func (e *Env) Unify(x, y Term) (*Env, bool) + type Exception struct + func DomainError(domain, culprit Term, env *Env) Exception + func EvaluationError(error Term, env *Env) Exception + func ExistenceError(objectType, culprit Term, env *Env) Exception + func InstantiationError(env *Env) Exception + func NewException(term Term, env *Env) Exception + func PermissionError(operation, permissionType, culprit Term, env *Env) Exception + func RepresentationError(limit Term, env *Env) Exception + func ResourceError(resource Term, env *Env) Exception + func SyntaxError(error Term, env *Env) Exception + func TypeError(typ, culprit Term, env *Env) Exception + func (e Exception) Error() string + func (e Exception) Term() Term + type Float struct + func NewFloatFromInt64(i int64) Float + func NewFloatFromString(s string) (Float, error) + func (f Float) Compare(t Term, env *Env) int + func (f Float) Eq(other Float) bool + func (f Float) Gt(other Float) bool + func (f Float) Gte(other Float) bool + func (f Float) Lt(other Float) bool + func (f Float) Lte(other Float) bool + func (f Float) Negative() bool + func (f Float) Positive() bool + func (f Float) String() string + func (f Float) WriteTerm(w io.Writer, opts *WriteOptions, _ *Env) error + func (f Float) Zero() bool + type HookFunc func(opcode Opcode, operand Term, env *Env) error + func CompositeHook(fs ...HookFunc) HookFunc + func DebugHookFn(w io.Writer) HookFunc + type Integer int64 + func (i Integer) Compare(t Term, env *Env) int + func (i Integer) WriteTerm(w io.Writer, opts *WriteOptions, _ *Env) error + type Lexer struct + func (l *Lexer) Token() (Token, error) + type ListIterator struct + AllowCycle bool + AllowPartial bool + Env *Env + List Term + func (i *ListIterator) Current() Term + func (i *ListIterator) Err() error + func (i *ListIterator) Next() bool + func (i *ListIterator) Suffix() Term + type NextFunc = func() (PromiseFunc, bool) + type Number interface + type Opcode byte + const OpCall + const OpCut + const OpEnter + const OpExit + const OpGetConst + const OpGetDict + const OpGetFunctor + const OpGetList + const OpGetPartial + const OpGetVar + const OpPop + const OpPutConst + const OpPutDict + const OpPutFunctor + const OpPutList + const OpPutPartial + const OpPutVar + func (op Opcode) String() string + type PanicError struct + OriginErr error + func (p PanicError) Error() string + type ParsedVariable struct + Count int + Name Atom + Variable Variable + type Parser struct + Vars []ParsedVariable + func NewParser(vm *VM, r io.RuneReader) *Parser + func (p *Parser) More() bool + func (p *Parser) SetPlaceholder(placeholder Atom, args ...interface{}) error + func (p *Parser) Term() (Term, error) + type Predicate0 func(*VM, Cont, *Env) *Promise + type Predicate1 func(*VM, Term, Cont, *Env) *Promise + type Predicate2 func(*VM, Term, Term, Cont, *Env) *Promise + type Predicate3 func(*VM, Term, Term, Term, Cont, *Env) *Promise + type Predicate4 func(*VM, Term, Term, Term, Term, Cont, *Env) *Promise + type Predicate5 func(*VM, Term, Term, Term, Term, Term, Cont, *Env) *Promise + type Predicate6 func(*VM, Term, Term, Term, Term, Term, Term, Cont, *Env) *Promise + type Predicate7 func(*VM, Term, Term, Term, Term, Term, Term, Term, Cont, *Env) *Promise + type Predicate8 func(*VM, Term, Term, Term, Term, Term, Term, Term, Term, Cont, *Env) *Promise + type Promise struct + func Abolish(vm *VM, pi Term, k Cont, env *Env) *Promise + func AcyclicTerm(_ *VM, t Term, k Cont, env *Env) *Promise + func Append(vm *VM, xs, ys, zs Term, k Cont, env *Env) *Promise + func Arg(vm *VM, nth, t, arg Term, k Cont, env *Env) *Promise + func Asserta(vm *VM, t Term, k Cont, env *Env) *Promise + func Assertz(vm *VM, t Term, k Cont, env *Env) *Promise + func AtomChars(vm *VM, atom, chars Term, k Cont, env *Env) *Promise + func AtomCodes(vm *VM, atom, codes Term, k Cont, env *Env) *Promise + func AtomConcat(vm *VM, atom1, atom2, atom3 Term, k Cont, env *Env) *Promise + func AtomLength(vm *VM, atom, length Term, k Cont, env *Env) *Promise + func BagOf(vm *VM, template, goal, instances Term, k Cont, env *Env) *Promise + func Between(vm *VM, lower, upper, value Term, k Cont, env *Env) *Promise + func Bool(ok bool) *Promise + func Call(vm *VM, goal Term, k Cont, env *Env) (promise *Promise) + func Call1(vm *VM, closure, arg1 Term, k Cont, env *Env) *Promise + func Call2(vm *VM, closure, arg1, arg2 Term, k Cont, env *Env) *Promise + func Call3(vm *VM, closure, arg1, arg2, arg3 Term, k Cont, env *Env) *Promise + func Call4(vm *VM, closure, arg1, arg2, arg3, arg4 Term, k Cont, env *Env) *Promise + func Call5(vm *VM, closure, arg1, arg2, arg3, arg4, arg5 Term, k Cont, env *Env) *Promise + func Call6(vm *VM, closure, arg1, arg2, arg3, arg4, arg5, arg6 Term, k Cont, env *Env) *Promise + func Call7(vm *VM, closure, arg1, arg2, arg3, arg4, arg5, arg6, arg7 Term, k Cont, ...) *Promise + func CallNth(vm *VM, goal, nth Term, k Cont, env *Env) *Promise + func Catch(vm *VM, goal, catcher, recover Term, k Cont, env *Env) *Promise + func CharCode(vm *VM, char, code Term, k Cont, env *Env) *Promise + func CharConversion(vm *VM, inChar, outChar Term, k Cont, env *Env) *Promise + func Clause(vm *VM, head, body Term, k Cont, env *Env) *Promise + func Close(vm *VM, streamOrAlias, options Term, k Cont, env *Env) *Promise + func Compare(vm *VM, order, term1, term2 Term, k Cont, env *Env) *Promise + func Consult(vm *VM, files Term, k Cont, env *Env) *Promise + func CopyTerm(vm *VM, in, out Term, k Cont, env *Env) *Promise + func CurrentCharConversion(vm *VM, inChar, outChar Term, k Cont, env *Env) *Promise + func CurrentInput(vm *VM, stream Term, k Cont, env *Env) *Promise + func CurrentOp(vm *VM, priority, specifier, op Term, k Cont, env *Env) *Promise + func CurrentOutput(vm *VM, stream Term, k Cont, env *Env) *Promise + func CurrentPredicate(vm *VM, pi Term, k Cont, env *Env) *Promise + func CurrentPrologFlag(vm *VM, flag, value Term, k Cont, env *Env) *Promise + func Delay(k ...PromiseFunc) *Promise + func DelaySeq(next NextFunc) *Promise + func Equal(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func Error(err error) *Promise + func ExpandTerm(vm *VM, term1, term2 Term, k Cont, env *Env) *Promise + func Failure(*Env) *Promise + func FindAll(vm *VM, template, goal, instances Term, k Cont, env *Env) *Promise + func FlushOutput(vm *VM, streamOrAlias Term, k Cont, env *Env) *Promise + func Functor(vm *VM, t, name, arity Term, k Cont, env *Env) *Promise + func GetByte(vm *VM, streamOrAlias, inByte Term, k Cont, env *Env) *Promise + func GetChar(vm *VM, streamOrAlias, char Term, k Cont, env *Env) *Promise + func GetDict3(vm *VM, keyPath Term, dict Term, result Term, cont Cont, env *Env) *Promise + func GreaterThan(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func GreaterThanOrEqual(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func Halt(_ *VM, n Term, k Cont, env *Env) *Promise + func Is(vm *VM, result, expression Term, k Cont, env *Env) *Promise + func KeySort(vm *VM, pairs, sorted Term, k Cont, env *Env) *Promise + func Length(vm *VM, list, length Term, k Cont, env *Env) *Promise + func LessThan(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func LessThanOrEqual(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func Negate(vm *VM, goal Term, k Cont, env *Env) *Promise + func NotEqual(_ *VM, e1, e2 Term, k Cont, env *Env) *Promise + func Nth0(vm *VM, n, list, elem Term, k Cont, env *Env) *Promise + func Nth1(vm *VM, n, list, elem Term, k Cont, env *Env) *Promise + func NumberChars(vm *VM, num, chars Term, k Cont, env *Env) *Promise + func NumberCodes(vm *VM, num, codes Term, k Cont, env *Env) *Promise + func Op(vm *VM, priority, specifier, op Term, k Cont, env *Env) *Promise + func Op3(vm *VM, dict, function, result Term, cont Cont, env *Env) *Promise + func Open(vm *VM, sourceSink, mode, stream, options Term, k Cont, env *Env) *Promise + func PeekByte(vm *VM, streamOrAlias, inByte Term, k Cont, env *Env) *Promise + func PeekChar(vm *VM, streamOrAlias, char Term, k Cont, env *Env) *Promise + func Phrase(vm *VM, grBody, s0, s Term, k Cont, env *Env) *Promise + func PutByte(vm *VM, streamOrAlias, byt Term, k Cont, env *Env) *Promise + func PutChar(vm *VM, streamOrAlias, char Term, k Cont, env *Env) *Promise + func PutDict3(vm *VM, new Term, dictIn Term, dictOut Term, cont Cont, env *Env) *Promise + func ReadTerm(vm *VM, streamOrAlias, out, options Term, k Cont, env *Env) *Promise + func Repeat(_ *VM, k Cont, env *Env) *Promise + func Retract(vm *VM, t Term, k Cont, env *Env) *Promise + func SetInput(vm *VM, streamOrAlias Term, k Cont, env *Env) *Promise + func SetOf(vm *VM, template, goal, instances Term, k Cont, env *Env) *Promise + func SetOutput(vm *VM, streamOrAlias Term, k Cont, env *Env) *Promise + func SetPrologFlag(vm *VM, flag, value Term, k Cont, env *Env) *Promise + func SetStreamPosition(vm *VM, streamOrAlias, position Term, k Cont, env *Env) *Promise + func SkipMaxList(vm *VM, skip, max, list, suffix Term, k Cont, env *Env) *Promise + func Sort(vm *VM, list, sorted Term, k Cont, env *Env) *Promise + func StreamProperty(vm *VM, stream, property Term, k Cont, env *Env) *Promise + func SubAtom(vm *VM, atom, before, length, after, subAtom Term, k Cont, env *Env) *Promise + func SubsumesTerm(_ *VM, general, specific Term, k Cont, env *Env) *Promise + func Succ(vm *VM, x, s Term, k Cont, env *Env) *Promise + func Success(*Env) *Promise + func TermVariables(vm *VM, term, vars Term, k Cont, env *Env) *Promise + func Throw(_ *VM, ball Term, _ Cont, env *Env) *Promise + func TypeAtom(_ *VM, t Term, k Cont, env *Env) *Promise + func TypeCompound(_ *VM, t Term, k Cont, env *Env) *Promise + func TypeFloat(_ *VM, t Term, k Cont, env *Env) *Promise + func TypeInteger(_ *VM, t Term, k Cont, env *Env) *Promise + func TypeVar(_ *VM, t Term, k Cont, env *Env) *Promise + func Unify(_ *VM, x, y Term, k Cont, env *Env) *Promise + func UnifyWithOccursCheck(_ *VM, x, y Term, k Cont, env *Env) *Promise + func Univ(vm *VM, t, list Term, k Cont, env *Env) *Promise + func WriteTerm(vm *VM, streamOrAlias, t, options Term, k Cont, env *Env) *Promise + func (p *Promise) Force(ctx context.Context) (ok bool, err error) + type PromiseFunc = func(context.Context) *Promise + type Stream struct + func NewInputBinaryStream(r io.Reader) *Stream + func NewInputTextStream(r io.Reader) *Stream + func NewOutputBinaryStream(w io.Writer) *Stream + func NewOutputTextStream(w io.Writer) *Stream + func (s *Stream) Close() error + func (s *Stream) Compare(t Term, env *Env) int + func (s *Stream) Flush() error + func (s *Stream) Name() string + func (s *Stream) ReadByte() (byte, error) + func (s *Stream) ReadRune() (r rune, size int, err error) + func (s *Stream) Seek(offset int64, whence int) (int64, error) + func (s *Stream) UnreadByte() error + func (s *Stream) UnreadRune() error + func (s *Stream) WriteByte(c byte) error + func (s *Stream) WriteRune(r rune) (size int, err error) + func (s *Stream) WriteTerm(w io.Writer, _ *WriteOptions, _ *Env) error + type Term interface + Compare func(t Term, env *Env) int + WriteTerm func(w io.Writer, opts *WriteOptions, env *Env) error + func CharList(s string) Term + func CodeList(s string) Term + func Cons(car, cdr Term) Term + func List(ts ...Term) Term + func PartialList(tail Term, ts ...Term) Term + type Token struct + func (t Token) String() string + type VM struct + FS fs.FS + Unknown func(name Atom, args []Term, env *Env) + func (vm *VM) Arrive(name Atom, args []Term, k Cont, env *Env) (promise *Promise) + func (vm *VM) ClearHook() + func (vm *VM) Compile(ctx context.Context, s string, args ...interface{}) error + func (vm *VM) InstallHook(f HookFunc) + func (vm *VM) Register0(name Atom, p Predicate0) + func (vm *VM) Register1(name Atom, p Predicate1) + func (vm *VM) Register2(name Atom, p Predicate2) + func (vm *VM) Register3(name Atom, p Predicate3) + func (vm *VM) Register4(name Atom, p Predicate4) + func (vm *VM) Register5(name Atom, p Predicate5) + func (vm *VM) Register6(name Atom, p Predicate6) + func (vm *VM) Register7(name Atom, p Predicate7) + func (vm *VM) Register8(name Atom, p Predicate8) + func (vm *VM) ResetEnv() + func (vm *VM) SetMaxVariables(n uint64) + func (vm *VM) SetUserInput(s *Stream) + func (vm *VM) SetUserOutput(s *Stream) + type Variable int64 + func NewVariable() Variable + func (v Variable) Compare(t Term, env *Env) int + func (v Variable) WriteTerm(w io.Writer, opts *WriteOptions, env *Env) error + type WriteOptions struct