transcendental-lisp/src/function/builtin/math/PLUS.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()));
}
}