gpt4 book ai didi

maple - 处理多个可选参数

转载 作者:行者123 更新时间:2023-12-05 09:27:30 24 4
gpt4 key购买 nike

我有一个程序

f:=proc(x,option1,option2) ... end proc;

在我的例子中,option1 总是一个整数,option2 是一个列表或其他东西(包括整数)。这两个选项都是可选的,因此这些命令按预期工作:

f(x);
f(x,3);
f(x,4,[1,2]);
f(x,5,3);
f(x,6,expand);

但是如果没有指定 option1 那么我不知道一个简单的方法来处理它,因为 Maple 不允许这样的用法

f(x,,3);
f(x,,[1,2]);

我可以让它明白

f(x,[1,2]);

但我还是有问题

f(x,3);

因为不清楚 3option1 还是 option2。我可以重写代码以理解这种格式的函数调用

f(x,[1,option1],[2,option2]);
f(x,[1,option1]);
f(x,[2,option2]);

但我很好奇是否有更简单的方法来实现这一点,因为对于某些 Maple 函数(如 plot),大多数选项的顺序无关紧要。

最佳答案

正如其他人已经提到的,一种解决方案是使用“kwarg”(关键字参数)。您还可以使用 _passed_rest。您可以在 Maple 帮助页面或 Maple 编程指南 (https://www.maplesoft.com/documentation_center/Maple2021/ProgrammingGuide.pdf) 中阅读更多内容。

这只是一个如何使用它们的示例。 _passed 用于当您想说出传递给您的过程的任何内容时,_rest 用于传递给您的过程的任何内容,除了已经分配的那些到您在 proc 前面的括号内提到的参数。假设我们要定义一个过程,其中包含 1 个必要参数和 2 个可能的可选参数。如果给出了两个可选参数,我们假设第一个总是option1,第二个是option2,但如果只给出一个可选参数,则取决于是否它是 integer 类型或不是 option1option2

要询问传递的参数的数量或传递参数的其余部分,您可以使用 _npassed_nrest。命令 assigned() 检查是否为某物分配了值。您可以通过 type(-,-)-::- 检查某物是否属于特定类型。所以这是简单的代码。

test := proc( x )
local option1, option2:
if _nrest = 2 then
option1 := _rest[1]:
option2 := _rest[2]:
elif _nrest = 1 then
if _rest[1] :: integer then
option1 := _rest[1]:
else
option2 := _rest[1]:
end if:
end if:
printf( "necessary argument is %a\n", x ):
if assigned( option1 ) then
printf( "option 1 is given and is %d\n", option1 ):
end if:
if assigned( option2 ) then
printf( "option 2 is given and is %a\n", option2 ):
end if:
end proc:

这是上述过程针对不同输入的输出屏幕截图。

enter image description here

关于maple - 处理多个可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72348421/

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