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()));
 | |
|     }
 | |
| 
 | |
| }
 |