Archived
1

Fundamental Redesign of Evaluation

This commit is contained in:
Kim Wittenburg
2014-11-24 22:42:44 +01:00
parent 10f0e73ad3
commit 7a32e3b0b6
45 changed files with 1398 additions and 350 deletions

View File

@@ -8,8 +8,8 @@
#import "MPSumFunction.h"
#import "MPSumFunctionTerm.h"
#import "MPExpression.h"
#import "MPExpressionTree.h"
#import "MPEvaluationContext.h"
@@ -27,54 +27,16 @@ MPFunctionAccessorImplementation(SumExpression, _sumExpression)
return @[@"startExpression", @"targetExpression", @"sumExpression"];
}
#pragma mark Evaluating Functions
- (BOOL)validate:(NSError *__autoreleasing *)error
- (BOOL)expectsVariableDefinitionInChildAtIndex:(NSUInteger)index
{
MPExpressionTree *startTree = [self.startExpression parse];
if (![startTree validateExpectingVariableDefinition:YES error:error]) {
return NO;
}
MPExpressionTree *targetTree = [self.targetExpression parse];
if (![targetTree validate:error]) {
return NO;
}
[[MPEvaluationContext sharedContext] push];
[[MPEvaluationContext sharedContext] defineVariable:startTree.definedVariable withValue:[NSDecimalNumber notANumber]];
MPExpressionTree *sumTree = [self.sumExpression parse];
if (![sumTree validate:error]) {
return NO;
}
[[MPEvaluationContext sharedContext] pop];
return YES;
return index == 0;
}
- (NSDecimalNumber *)evaluate
- (Class)functionTermClass
{
MPExpressionTree *startTree = [self.startExpression parse];
NSDecimalNumber *start = [startTree evaluate];
NSDecimalNumber *target = [[self.targetExpression parse] evaluate];
MPExpressionTree *sumTree = [self.sumExpression parse];
NSDecimalNumber *value = [NSDecimalNumber zero];
[[MPEvaluationContext sharedContext] push];
for (NSDecimalNumber *current = start;
[current compare:target] <= 0;
current = [current decimalNumberByAdding:[[NSDecimalNumber alloc] initWithInteger:1]]) {
[[MPEvaluationContext sharedContext] defineVariable:startTree.definedVariable withValue:current];
value = [value decimalNumberByAdding:[sumTree evaluate]];
}
[[MPEvaluationContext sharedContext] pop];
return value;
return [MPSumFunctionTerm class];
}
#pragma mark Working With Functions