gpt4 book ai didi

ios - 任何人都可以帮助修复这个 DDMathParser 新功能吗?

转载 作者:行者123 更新时间:2023-11-29 11:01:28 25 4
gpt4 key购买 nike

我正在注册一个求和函数,它是 sum(expression,initial,final)expression 包含独立变量 x 并且 initialfinal 是整数。例如,sum(2x,2,4) 应返回 2*2+3*2+4*2=18。但是,我无法用 expression 中的 x 替换 initialfinal 之间的每个值。这是我的代码,它不起作用。谁能告诉我如何解决它?

//sum(expr (dependent on x),initial,final)
[evaluator registerFunction:^DDExpression *(NSArray *args, NSDictionary *vars, DDMathEvaluator *eval, NSError *__autoreleasing *error) {
DDExpression *final = nil;
if([args count] == 3){
DDExpression *expr = [args objectAtIndex:0];
DDExpression *start = [args objectAtIndex:1];
DDExpression *end = [args objectAtIndex:2];
//test whether start and end are integers
double startDouble = [[start evaluateWithSubstitutions:nil evaluator:evaluator error:nil] doubleValue];
double endDouble = [[end evaluateWithSubstitutions:nil evaluator:evaluator error:nil] doubleValue];
int startInt = (int)startDouble;
int endInt = (int)endDouble;
if (((startDouble-startInt)>0.9999 || (startDouble-startInt)<0.0001) && ((endDouble-endInt)>0.9999 || (endDouble-endInt)<0.0001)) {
//start and end are integers
double resultSum = 0;
for (int i=startInt; i<=endInt; i++) {
NSNumber *xValue = [NSNumber numberWithInt:i];
NSDictionary *substitution = [NSDictionary dictionaryWithObjectsAndKeys:xValue,@"x", nil];
NSNumber *valueOfExpr = [expr evaluateWithSubstitutions:substitution evaluator:evaluator error:nil];
resultSum = resultSum + [valueOfExpr doubleValue];
}
final = [DDExpression numberExpressionWithNumber:[NSNumber numberWithDouble:resultSum]];
}
}
return final;
}forName:@"sum"];

最佳答案

DDMathParser 作者在这里。

有两件事是错误的,一件事不是最理想的。

  1. 错误 - 您不能将此函数称为“求和”。 "sum" is a built-in function , 和 built-in functions cannot be overridden .
  2. 错误 - 您函数的第一个参数是:"2x"。这很好,只是 x 被解释为一个 函数,但是在您的 for 循环中,您将 x 视为一个变量.您要么需要从根本上改变函数的工作方式,要么使用 2 * $x(或只是 2$x)形式作为函数的第一个参数。<
  3. 次优 - 不是从评估的参数中获取 doubleValue,而是获取 integerValue,避免整个 double 到整数的转换。

下面是我将如何清理您的函数(尽管您可能应该在填充 error out 参数方面做更多的事情):

[evaluator registerFunction:^DDExpression *(NSArray *args, NSDictionary *vars, DDMathEvaluator *eval, NSError *__autoreleasing *error) {
DDExpression *final = nil;
if ([args count] == 3) {
DDExpression *expr = [args objectAtIndex:0];
DDExpression *start = [args objectAtIndex:1];
DDExpression *end = [args objectAtIndex:2];
//get the start and end values
NSInteger startValue = [[eval evaluateExpression:start withSubstitutions:vars error:error] integerValue];
NSInteger endValue = [[eval evaluateExpression:end withSubstitutions:vars error:error] integerValue];

double sum = 0;
for (NSInteger i = startValue; i <= endValue; i++) {
NSDictionary *substitution = @{@"x": @(i)};
NSNumber *value = [eval evaluateExpression:expr withSubstitutions:substitution error:error];
sum += [value doubleValue];
}
final = [DDExpression numberExpressionWithNumber:@(sum)];
}
return final;
} forName:@"sum2"];

有了这个,您可以执行 sum2(2*$x, 2, 4),它的计算结果将是 18。

关于ios - 任何人都可以帮助修复这个 DDMathParser 新功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15717995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com