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  }