コード例 #1
0
 public Object toPrefix() {
   Object r = Lisp.list(coef[coef.length - 1].toPrefix());
   Object x = var.toPrefix();
   for (int i = coef.length - 1; i > 0; i--) {
     r = Lisp.list(Lisp.cons("*", Lisp.cons(x, r)));
     if (!coef[i - 1].equals(Zahl.ZERO)) {
       r = Lisp.list(Lisp.cons("+", Lisp.cons(coef[i - 1].toPrefix(), r)));
     }
   }
   return Lisp.car(r);
 }
コード例 #2
0
ファイル: Cons.java プロジェクト: rritoch/jrelisp-abcl
 @Override
 public LispObject evalImpl(final Environment env, final LispThread thread) {
   if (false && car.isOperator()) {
     LispObject fun = car; // env.lookupFunction(car);
     if (fun != null) return evalCall(fun, cdr, env, thread);
   }
   if (car.isSymbol()) {
     final Symbol first = (Symbol) car;
     LispObject fun = env.lookupFunction(car);
     if (fun instanceof SpecialOperator) {
       if (profiling) if (!sampling) fun.incrementCallCount();
       // Don't eval args!
       maybeSaveSymbolFunction(first, fun);
       return fun.execute(cdr, env);
     }
     if (fun != null && fun.isMacroObject()) {
       maybeSaveSymbolFunction(first, fun);
       LispObject lo = macroexpand(this, env, thread);
       return eval(lo, env, thread);
     }
     if (fun != null && fun.isAutoload()) {
       Autoload autoload = (Autoload) fun;
       autoload.load();
       maybeSaveSymbolFunction(first, autoload);
       return eval(this, env, thread);
     }
     maybeSaveSymbolFunction(first, fun);
     return evalCall(fun != null ? fun : first, cdr, env, thread);
   } else {
     final LispObject first = car;
     if (first != null && first.isCons() && first.car() == Symbol.LAMBDA) {
       Closure closure = new Closure(first, env);
       maybeSaveSymbolFunction(first, closure);
       return evalCall(closure, cdr, env, thread);
     } else return program_error("Illegal function object: " + Lisp.princNonNull(first) + ".");
   }
 }