28 lines
795 B
Java
28 lines
795 B
Java
package function.builtin.math;
|
|
|
|
import function.*;
|
|
import sexpression.*;
|
|
|
|
public class PLUS extends LispFunction {
|
|
|
|
private ArgumentValidator argumentValidator;
|
|
private MathFunction mathFunction;
|
|
|
|
public PLUS() {
|
|
this.argumentValidator = new ArgumentValidator("+");
|
|
this.argumentValidator.setEveryArgumentExpectedType(LispNumber.class);
|
|
this.mathFunction = new MathFunction(number -> number, this::add);
|
|
}
|
|
|
|
public SExpression call(Cons argumentList) {
|
|
argumentValidator.validate(argumentList);
|
|
|
|
return mathFunction.callTailRecursive(new Cons(LispNumber.ZERO, argumentList));
|
|
}
|
|
|
|
private LispNumber add(LispNumber number1, LispNumber number2) {
|
|
return new LispNumber(number1.getValue().add(number2.getValue()));
|
|
}
|
|
|
|
}
|