Implemented Evaluation
This commit is contained in:
@@ -9,6 +9,8 @@
|
|||||||
#import "MPSumFunction.h"
|
#import "MPSumFunction.h"
|
||||||
#import "MPExpression.h"
|
#import "MPExpression.h"
|
||||||
|
|
||||||
|
#import "MPExpressionEvaluator.h"
|
||||||
|
|
||||||
@implementation MPSumFunction
|
@implementation MPSumFunction
|
||||||
|
|
||||||
#pragma mark Creation Methods
|
#pragma mark Creation Methods
|
||||||
@@ -97,10 +99,30 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark Evaluating Functions
|
#pragma mark Evaluating Functions
|
||||||
- (double)evaluateFunction:(NSError *__autoreleasing *)error
|
- (NSDecimalNumber *)evaluate:(MPParseError *__autoreleasing *)error
|
||||||
{
|
{
|
||||||
#warning Unimplemented Method
|
MPExpressionEvaluator *startEvaluator = self.startExpression.evaluator;
|
||||||
return 0.0;
|
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
|
#pragma mark Working With Functions
|
||||||
|
|||||||
Reference in New Issue
Block a user