class Lambda

Public Class Methods

new(env, forms, params, *code) click to toggle source
# File lib/schemerald/Lambda.rb, line 2
def initialize(env, forms, params, *code)
  @environment = env
  @forms = forms
  @parameters = params.arrayify
  @code = code
end

Public Instance Methods

call(*args) click to toggle source
# File lib/schemerald/Lambda.rb, line 9
def call(*args)
  raise SchemeError, "arity mismatch: expected #{@parameters.size} arguments" unless
    args.size == @parameters.size
  new_env = Environment.new(@environment)
  @parameters.zip(args).each do |name, value|
    new_env.define(name, value)
  end
  @code.map{|x| x.scheme_eval(new_env, @forms) }.last
end