1 21 22 package org.armedbear.lisp; 23 24 public final class ceiling extends Primitive 26 { 27 private ceiling() 28 { 29 super("ceiling", "number &optional divisor"); 30 } 31 32 public LispObject execute(LispObject arg) throws ConditionThrowable 33 { 34 return execute(arg, Fixnum.ONE); 35 } 36 37 public LispObject execute(LispObject first, LispObject second) 38 throws ConditionThrowable 39 { 40 LispObject quotient = first.truncate(second); 41 final LispThread thread = LispThread.currentThread(); 42 LispObject remainder = thread._values[1]; 43 if (remainder.zerop()) 44 return quotient; 45 if (second.minusp()) { 46 if (first.plusp()) 47 return quotient; 48 } else { 49 if (first.minusp()) 50 return quotient; 51 } 52 quotient = quotient.incr(); 53 thread._values[0] = quotient; 54 thread._values[1] = remainder.subtract(second); 55 return quotient; 56 } 57 58 private static final Primitive CEILING = new ceiling(); 59 } 60 | Popular Tags |