gpt4 book ai didi

枫树错误 : final value in for loop must be numeric or character

转载 作者:行者123 更新时间:2023-12-05 04:46:02 25 4
gpt4 key购买 nike

我在 Maple 中有这个简单的过程,我想绘制它。

test:=proc(n)
local i,t;
for i from 1 to n do
t:=1;
od;
return t;
end:

程序本身运行良好。

> test(19)
1

当我想绘图时,出现以下错误:

> plot(test(x),x=1..10)
Error, (in test) final value in for loop must be numeric or character

请帮忙

最佳答案

Maple 的通常评估模型是传递给命令的参数在命令自身过程的主体内完成计算之前预先评估。

因此,如果您将 test(x) 传递给 plot 命令,那么 Maple 将预先评估该参数 test(x),其中x 只是一个符号名称。

plot 命令只是在稍后构建绘图时才会用实际数值替换该 x 名称。

因此,参数 test(x) 是预先评估的。但是让我们看看当我们尝试对 test(x) 进行这样的预先评估时会发生什么。

test:=proc(n)
local i,t;
for i from 1 to n do
t:=1;
od;
return t;
end:

test(x);
Error, (in test) final value in for loop
must be numeric or character

我们可以看到您的 test 过程没有设置为接收非数字的符号名称,例如 x 作为它自己的参数。

换句话说,问题在于您传递给 plot 命令的内容。

这种问题有时被称为“过早评估”。这是一个常见的 Maple 使用错误。有几种方法可以避免该问题。

一种方法是利用 plot 命令的所谓“运算符形式”调用序列。

plot(test, 1..10);

另一种方法是延迟对test(x) 的评估。下面使用所谓的未评估引号(又名单个右勾号,即撇号)延迟了 test(x) 的评估。这会阻止 test(x) 被评估,直到内部绘图例程将符号名称 x 替换为实际数值。

plot('test(x)', x=1..10);

另一种技术是重写 test,这样对它的任何调用都将返回未计算的值,除非它的参数是数字。

test:=proc(n)
local i,t;
if not type(n,numeric) then
return 'procname'(args);
end if;
for i from 1 to n do
t:=1;
od;
return t;
end:

# no longer produces an error
test(x);

test(x)

# the passed argument is numeric
test(19);

1

plot(test(x), x=1..10);

我不会在这里显示实际的图,因为您的示例只生成常数 1(一)的图。

关于枫树错误 : final value in for loop must be numeric or character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68966814/

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