Documentation
¶
Overview ¶
evaluator
Index ¶
- func ApplicationExpr(expr Expression) bool
- func Apply(app interface{}, args ...interface{}) interface{}
- func AssignExpr(expr Expression) bool
- func DefineExpr(expr Expression) bool
- func Eval(e *Expression, env *Environment) interface{}
- func EvalArgs(exprs []Expression, env *Environment) []interface{}
- func EvalAssign(e *Expression, env *Environment)
- func EvalDefine(e *Expression, env *Environment)
- func EvalIf(e *Expression, env *Environment) (interface{}, bool)
- func IfExpr(expr Expression) bool
- func InitGlobal()
- func IsCompound(app interface{}) bool
- func IsEmpty(env *Environment) bool
- func IsPrimitive(app interface{}) bool
- func LambdaApplicationExpr(expr Expression) bool
- func LambdaExpr(expr Expression) bool
- func NumberExpr(expr Expression) bool
- func PerformExpr(expr Expression) bool
- func ProcedureExpr(expr Expression) bool
- func ProcedureParas(expr Expression) ([]string, int)
- func ProcedureVar(expr Expression) string
- func SymbolExpr(expr Expression) bool
- type CompoundProcedure
- type Environment
- type Expression
- func ApplicationName(expr Expression) Expression
- func ApplicationaParas(expr Expression) ([]Expression, int)
- func ExtractParas(e Expression) (Expression, int)
- func IfBody(expr Expression) (Expression, int)
- func MakeExpr(text string) *Expression
- func NextBlock(e Expression) (Expression, int)
- func NextSegment(e Expression, start, end string) (Expression, int)
- func ProcedureBody(expr Expression) (Expression, int)
- type Frame
- type Procedure
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ApplicationExpr ¶
func ApplicationExpr(expr Expression) bool
func AssignExpr ¶
func AssignExpr(expr Expression) bool
func DefineExpr ¶
func DefineExpr(expr Expression) bool
func Eval ¶
func Eval(e *Expression, env *Environment) interface{}
func EvalArgs ¶
func EvalArgs(exprs []Expression, env *Environment) []interface{}
func EvalAssign ¶
func EvalAssign(e *Expression, env *Environment)
func EvalDefine ¶
func EvalDefine(e *Expression, env *Environment)
func EvalIf ¶
func EvalIf(e *Expression, env *Environment) (interface{}, bool)
func IfExpr ¶
func IfExpr(expr Expression) bool
func InitGlobal ¶
func InitGlobal()
func IsCompound ¶
func IsCompound(app interface{}) bool
func IsEmpty ¶
func IsEmpty(env *Environment) bool
func IsPrimitive ¶
func IsPrimitive(app interface{}) bool
func LambdaApplicationExpr ¶
func LambdaApplicationExpr(expr Expression) bool
func LambdaExpr ¶
func LambdaExpr(expr Expression) bool
func NumberExpr ¶
func NumberExpr(expr Expression) bool
func PerformExpr ¶
func PerformExpr(expr Expression) bool
Example ¶
InitGlobal()
text := `
define l list('a,'b,'c)
define printlist(l) {
perform print(car(l))
if not-null?(cdr(l)) {
printlist(cdr(l))
}
}
printlist(l)
`
expr := MakeExpr(text)
Eval(expr, GlobalEnv)
Output: abc
func ProcedureExpr ¶
func ProcedureExpr(expr Expression) bool
func ProcedureParas ¶
func ProcedureParas(expr Expression) ([]string, int)
func ProcedureVar ¶
func ProcedureVar(expr Expression) string
func SymbolExpr ¶
func SymbolExpr(expr Expression) bool
Types ¶
type CompoundProcedure ¶
type CompoundProcedure struct {
// contains filtered or unexported fields
}
func Compound ¶
func Compound(app interface{}) CompoundProcedure
func EvalLambda ¶
func EvalLambda(e *Expression, env *Environment) CompoundProcedure
func NewCompoundProdedure ¶
func NewCompoundProdedure(paras []string, body Expression, env *Environment) CompoundProcedure
func (*CompoundProcedure) Body ¶
func (c *CompoundProcedure) Body() Expression
func (*CompoundProcedure) Env ¶
func (c *CompoundProcedure) Env() *Environment
func (*CompoundProcedure) Paras ¶
func (c *CompoundProcedure) Paras() []string
type Environment ¶
type Environment struct {
Enclose *Environment
Frame Frame
}
Example ¶
vars := []string{"a", "b", "c"}
val := []interface{}{"a", 3.14, 1}
env := ExtendEnv(GlobalEnv, vars, val)
env.SetVariable("b", "b")
env.DefineVariable("d", "d")
vars = append(vars, "d")
for _, va := range vars {
val := env.LookUpVariable(va)
fmt.Println(val)
}
Output: a b 1 d
var GlobalEnv *Environment
func ExtendEnv ¶
func ExtendEnv(enclose *Environment, vars []string, vals []interface{}) *Environment
func (*Environment) DefineVariable ¶
func (env *Environment) DefineVariable(v string, val interface{})
func (*Environment) LookUpVariable ¶
func (env *Environment) LookUpVariable(v string) interface{}
func (*Environment) SetVariable ¶
func (env *Environment) SetVariable(v string, val interface{})
type Expression ¶
type Expression []string
func ApplicationName ¶
func ApplicationName(expr Expression) Expression
func ApplicationaParas ¶
func ApplicationaParas(expr Expression) ([]Expression, int)
func ExtractParas ¶
func ExtractParas(e Expression) (Expression, int)
func IfBody ¶
func IfBody(expr Expression) (Expression, int)
func MakeExpr ¶
func MakeExpr(text string) *Expression
func NextBlock ¶
func NextBlock(e Expression) (Expression, int)
func NextSegment ¶
func NextSegment(e Expression, start, end string) (Expression, int)
func ProcedureBody ¶
func ProcedureBody(expr Expression) (Expression, int)
func (Expression) Advance ¶
func (e Expression) Advance(n int) Expression
func (Expression) Rest ¶
func (e Expression) Rest() Expression
Click to show internal directories.
Click to hide internal directories.
