如何在Maple循环中仅输出op(0,z)的运算符而非proc()?
问题描述
执行单条Maple代码:
z:=factor(randpoly(x)): op(0,z);
能得到简洁的运算符结果(如+,多项式在有理数域可约时也可能返回*或^)。但将代码放入循环中执行:
for i from 1 to 1 do z:=factor(randpoly(x)): print(op(0,z)); end do:
输出却变成了包含proc的完整定义:
proc () option builtin = `+`; end proc
如何修改才能仅输出+这类运算符,而非带proc的内容?
解决方法
有两种可行的方式提取纯运算符名称:
- 方法一:双层
op(0)提取
修改循环内的打印语句,通过两层op(0)获取内置过程的名称符号:
for i from 1 to 1 do z:=factor(randpoly(x)): print(op(0, op(0, z))); end do:
- 方法二:使用
nameof函数nameof函数可直接返回内置过程的名称,代码修改如下:
for i from 1 to 1 do z:=factor(randpoly(x)): print(nameof(op(0,z))); end do:
原理说明:在顶层直接执行op(0,z)时,Maple会自动将内置过程对象简化显示为运算符名称;但在循环的print调用中,会输出过程的完整定义。上述两种方式都能绕过这种差异,直接提取出纯运算符符号。
内容的提问来源于stack exchange,提问作者Robertas Vilkas
相关产品推荐
相关产品推荐

