func IsVariable(t Term) bool {
	return t.Type() == VariableType
}
Returns true if term t is a variable.
package term
import . "fmt"
import . "regexp"
import "math/big"
import "math"
import "strconv"
import "strings"
import "github.com/mndrix/golog/lex"
import "github.com/mndrix/ps"
var CantUnify error = Errorf("Can't unify the given terms")
const (
	VariableType = iota
	FloatType
	IntegerType
	AtomType
	CompoundType
	ErrorType
)
type Term interface {
	ReplaceVariables(Bindings) Term
	String() string
	Type() int
	Indicator() string
	Unify(Bindings, Term) (Bindings, error)
}
type Callable interface {
	Term
	Name() string
	Arity() int
	Arguments() []Term
}
func IsAtom(t Term) bool {
	return t.Type() == AtomType
}
func IsClause(t Term) bool {
	switch t.Type() {
	case CompoundType:
		x := t.(*Compound)
		return x.Arity() == 2 && x.Name() == ":-"
	case AtomType,
		VariableType,
		IntegerType,
		FloatType,
		ErrorType:
		return false
	}
	msg := Sprintf("Unexpected term type: %#v", t)
	panic(msg)
}
func IsCompound(t Term) bool {
	return t.Type() == CompoundType
}
func IsCallable(t Term) bool {
	tp := t.Type()
	return tp == AtomType || tp == CompoundType
}