Implemented Evaluation
This commit is contained in:
@@ -9,6 +9,8 @@
|
||||
#import "MPSumFunction.h"
|
||||
#import "MPExpression.h"
|
||||
|
||||
#import "MPExpressionEvaluator.h"
|
||||
|
||||
@implementation MPSumFunction
|
||||
|
||||
#pragma mark Creation Methods
|
||||
@@ -97,10 +99,30 @@
|
||||
}
|
||||
|
||||
#pragma mark Evaluating Functions
|
||||
- (double)evaluateFunction:(NSError *__autoreleasing *)error
|
||||
- (NSDecimalNumber *)evaluate:(MPParseError *__autoreleasing *)error
|
||||
{
|
||||
#warning Unimplemented Method
|
||||
return 0.0;
|
||||
MPExpressionEvaluator *startEvaluator = self.startExpression.evaluator;
|
||||
NSDecimalNumber *start = [startEvaluator evaluateVariableDefinition:YES error:error];
|
||||
if (!start) {
|
||||
return nil;
|
||||
}
|
||||
NSDecimalNumber *target = [self.targetExpression evaluateWithError:error];
|
||||
if (!target) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
MPExpressionEvaluator *sumEvaluator = self.sumExpression.evaluator;
|
||||
NSDecimalNumber *value = [NSDecimalNumber zero];
|
||||
for (NSDecimalNumber *iterator = start; [iterator compare:target] <= 0; iterator = [iterator decimalNumberByAdding:[[NSDecimalNumber alloc] initWithInteger:1]]) {
|
||||
[sumEvaluator bindValue:iterator toVariableName:startEvaluator.definedVariable];
|
||||
NSDecimalNumber *summand = [sumEvaluator evaluateWithError:error];
|
||||
if (summand) {
|
||||
value = [value decimalNumberByAdding:summand];
|
||||
} else {
|
||||
return nil;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
#pragma mark Working With Functions
|
||||
|
||||
Reference in New Issue
Block a user