(wx)Maxima:如何使用`args`获得一致的表达式?

拉克斯·阿达姆(Rax Adaam)

我正在尝试编写一个小的脚本,该脚本将查看表达式的第一项并确定它是正数还是负数,然后相应地在该表达式前打印a+-但是,我在以可靠地提取表达式的第一项的方式编写它时遇到了一些麻烦。

我一直在尝试partargs我之所以倾向于,args是因为我没有找到任何方法来确定parts任意表达式的“深度” 即,我不确定如何确定是否使用,例如 part(expr,1)orpart(expr,1,1)part(expr, 1,1,1) etc)。

问题args在于,例如

declare(cos, posfun)$
args(-2*cos(x));
    > [2 cos(x)]

也就是说,负数被删除了,大概是由于表达式的Lisp表示(我们从中得到了相同的结果part(-2*cos(x),1);此外,part(-2*cos(x),2)“掉到了尽头”-似乎part根本看不到-)。

相比之下,

args(-2*cos(x)+x);
    > [x, -2cos(x) ]

如预期的那样。

不管这是否是这些功能的理想行为,我都希望找到某种解决方法,以便我可以拥有一个具有以下功能的功能:

addOp(x) > ["+", x]
addOp(-x) > ["-", x]

addOp(1+2*x+x^2) > ["+", 1+2*x+x^2]
addOp(-2+2*x+x^2) > ["-", 2+2*x+x^2] /* NB: only the first term is scaled by -1, not the entire expression */

addOp(cos(...)) > ["+", cos(...)]
addOp(-2x*cos(...)) > ["-", 2x*cos(x) ]

我还尝试将op函数与已知数字一起使用;但是,负数的内部表示意味着类似op(1-3*cos(x))return的事情+

这个让我感到难过一段时间,所以任何建议都将不胜感激。

罗伯特·多迪尔

这是我的第一次尝试。它似乎主要按照您描述的方式工作,除了%o11因为-2获取从开始到结束。

(%i1) f(e):= if atom(e) then ["+", e]
 else if op(e) = "-" then ["-", -e]
 elseif op(e) = "+" then [f(first(e)), rest(e)]
 else ["+", e];
(%o1) f(e) := if atom(e) then ["+", e] else (if op(e) = "-" then ["-", - e]
                  elseif op(e) = "+" then [f(first(e)), rest(e)] else ["+", e])
(%i2) f(x);
(%o2)                               [+, x]
(%i3) f(-x);
(%o3)                               [-, x]
(%i4) f(-2*x);
(%o4)                              [-, 2 x]
(%i5) f(-2*cos(x));
(%o5)                            [-, 2 cos(x)]
(%i6) f(1-2*cos(x));
(%o6)                        [[+, 1], - 2 cos(x)]
(%i7) f(-1+2*cos(x));
(%o7)                        [[+, 2 cos(x)], - 1]
(%i8) f(-1-2*cos(x));
(%o8)                        [[-, 2 cos(x)], - 1]
(%i9) f(a*b+c*d-e*f*g);
(%o9)                       [[-, e f g], c d + a b]
(%i10) f(1+2*x+x^2);
                                    2
(%o10)                        [[+, x ], 2 x + 1]
(%i11) f(-2+2*x+x^2);
                                    2
(%o11)                        [[+, x ], 2 x - 2]
(%i12) f(cos(a*b-c));
(%o12)                         [+, cos(c - a b)]
(%i13) f(-2*cos(x-y*z));
(%o13)                        [-, 2 cos(y z - x)]
(%i14) f(-2*x*cos(b-c));
(%o14)                        [-, 2 cos(c - b) x]
(%i15) -2+2*x+x^2;
                                  2
(%o15)                           x  + 2 x - 2
(%i16) f(-2 + 2*x - x^2);
                                    2
(%o16)                        [[-, x ], 2 x - 2]
(%i17) -2 + 2*x - x^2;
                                   2
(%o17)                         (- x ) + 2 x - 2
(%i18) f(a-b);
(%o18)                           [[+, a], - b]
(%i19) f(b-a);
(%o19)                           [[+, b], - a]

所要做的事情op(e) = "-"是,像这样的东西-2*cos(x)在对其进行处理-(2*cos(x))之前会被重组args(尽管我认为inpart会禁用该行为或对其进行修改)。

编辑:取2。atom(-2)返回值true,因此-2被前面定义中的第一种情况捕获。这是另一种尝试,将负数与其他原子区分开。

f(e):= 
if atom(e)
 then (if numberp(e) and e < 0 then ["-", -e] else ["+", e])
 else if op(e) = "-" then ["-", -e]
 elseif op(e) = "+" then [f(first(e)), rest(e)]
 else ["+", e];

我没有尝试此代码,但也许您可以说出它是否有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

(wx)Maxima:如何使用`args`获得一致的表达式?

来自分类Dev

如何使用一致的语法重写此LINQ表达式?

来自分类Dev

(wx)Maxima:使用“ sec”,“ csc”和“ cot”而不是倒数返回表达式?

来自分类Dev

了解如何使用EL和JSP表达式检索不存在的属性。与负责人不一致

来自分类Dev

如何使用正则表达式获得[0]的最后一次出现?

来自分类Dev

如何使用正则表达式获得特定细分?

来自分类Dev

如何使用正则表达式获得重复组?

来自分类Dev

如何使用正则表达式替换获得结果

来自分类Dev

正则表达式捕获的组与正则表达式的成功不一致

来自分类Dev

maxima CAS-如何用变量代替表达式?

来自分类Dev

如何获得lambda表达式的值

来自分类Dev

如何获得lambda表达式的值

来自分类常见问题

Raku正则表达式:最长的令牌匹配不一致

来自分类Dev

正则表达式以一致的顺序提取字符串的不同部分

来自分类Dev

您可以一致地进行正则表达式吗?

来自分类Dev

Java 8中函数类型一致的lambda表达式的用法

来自分类Dev

正则表达式匹配中的不一致

来自分类Dev

客观C正则表达式不一致

来自分类Dev

红宝石正则表达式不一致

来自分类Dev

Matlab正则表达式与令牌的行为不一致

来自分类Dev

group()和group()之间的Python正则表达式输出不一致

来自分类Dev

Java中不一致的正则表达式字符类

来自分类Dev

Javascript-正则表达式不一致

来自分类Dev

正则表达式验证不一致

来自分类Dev

正则表达式用于一致的人名

来自分类Dev

C++ Visual Studio 2015 正则表达式不一致

来自分类Dev

正则表达式没有返回一致的结果

来自分类Dev

如何使用hash_hmac()获得一致的回报

来自分类Dev

如何获得使用正则表达式嵌套在另一个组中的重复组?

Related 相关文章

  1. 1

    (wx)Maxima:如何使用`args`获得一致的表达式?

  2. 2

    如何使用一致的语法重写此LINQ表达式?

  3. 3

    (wx)Maxima:使用“ sec”,“ csc”和“ cot”而不是倒数返回表达式?

  4. 4

    了解如何使用EL和JSP表达式检索不存在的属性。与负责人不一致

  5. 5

    如何使用正则表达式获得[0]的最后一次出现?

  6. 6

    如何使用正则表达式获得特定细分?

  7. 7

    如何使用正则表达式获得重复组?

  8. 8

    如何使用正则表达式替换获得结果

  9. 9

    正则表达式捕获的组与正则表达式的成功不一致

  10. 10

    maxima CAS-如何用变量代替表达式?

  11. 11

    如何获得lambda表达式的值

  12. 12

    如何获得lambda表达式的值

  13. 13

    Raku正则表达式:最长的令牌匹配不一致

  14. 14

    正则表达式以一致的顺序提取字符串的不同部分

  15. 15

    您可以一致地进行正则表达式吗?

  16. 16

    Java 8中函数类型一致的lambda表达式的用法

  17. 17

    正则表达式匹配中的不一致

  18. 18

    客观C正则表达式不一致

  19. 19

    红宝石正则表达式不一致

  20. 20

    Matlab正则表达式与令牌的行为不一致

  21. 21

    group()和group()之间的Python正则表达式输出不一致

  22. 22

    Java中不一致的正则表达式字符类

  23. 23

    Javascript-正则表达式不一致

  24. 24

    正则表达式验证不一致

  25. 25

    正则表达式用于一致的人名

  26. 26

    C++ Visual Studio 2015 正则表达式不一致

  27. 27

    正则表达式没有返回一致的结果

  28. 28

    如何使用hash_hmac()获得一致的回报

  29. 29

    如何获得使用正则表达式嵌套在另一个组中的重复组?

热门标签

归档