// Copyright (c) 1996-2002 Brian D. Carlstrom

package bdc.scheme.expression;

import bdc.scheme.Environment;
import bdc.scheme.Stack;
import bdc.scheme.compiler.CompileTimeEnvironment;
import bdc.util.FastStringBuffer;

public class NaryLambda extends Lambda
{
    public NaryLambda (CompileTimeEnvironment compileTimeEnvironment,
                       Begin                  body)
    {
        super(compileTimeEnvironment, body);
    }

    public Object eval (Environment environment, Stack stack)
    {
        return new NaryCompound(this, environment);
    }

    public String toString ()
    {
        FastStringBuffer result = new FastStringBuffer("(lambda ");
        if (variables.inUse == 1) {
            result.append(variables.array[0].toString());
        }
        else {
            result.append('(');
            for (int i = 1; i < variables.inUse; i++) {
                result.append(variables.array[i].toString());
                if (i+1 < variables.inUse) {
                    result.append(' ');
                }
                else {
                    result.append(" . ");
                }
            }
            result.append(variables.array[0].toString());
            result.append(')');
        }
        result.append(' ');
        result.append(Begin.backtrace(body));
        result.append(')');
        return result.toString();
    }

}
