github.com/masahide/goansible@v0.0.0-20160116054156-01eac649e9f2/lisp/proc.go (about) 1 package lisp 2 3 import "fmt" 4 5 type Proc struct { 6 params Vector 7 body Cons 8 scope ScopedVars 9 } 10 11 func (p Proc) String() string { 12 return "<Procedure>" 13 } 14 15 func (p Proc) Call(scope ScopedVars, params Vector) (val Value, err error) { 16 if len(p.params) == len(params) { 17 scope = p.scope 18 for i, name := range p.params { 19 scope.Create(name.String(), params[i]) 20 } 21 val, err = p.body.Eval(scope) 22 } else { 23 err = fmt.Errorf("%v has been called with %v arguments; it requires exactly %v arguments", p, len(params), len(p.params)) 24 } 25 return 26 }