替换 Maple 中的 Square-Expression

Replace Square-Expression in Maple

给定一个像

这样的 maple 表达式
f := (y + 5)^2 + x^2

如何用自定义函数替换所有出现的平方函数?我想要的结果是

square(y + 5) + square(x)

我试过

subs({x^2 = square(x)}, f)

但是,这只会替换 x^2 表达式。我当然也可以明确列出 (y + 5) 术语,但我想替换任何出现的 (.)^2 而不明确列出所有内容。

如何在 Maple 中执行此操作?

您可以使用 subsindetsapplyrule 来完成此操作。

expression:=(y-5)^2+3+sin(((z-1/3)^2/(t-(y-s)^2)))+F(f(17+p^2)^2);

                                   /         2  \                 
                                   |  /    1\   |                 
                                   |  |z - -|   |    /          2\
                        2          |  \    3/   |    | / 2     \ |
   expression := (y - 5)  + 3 + sin|------------| + F\f\p  + 17/ /
                                   |           2|                 
                                   \t - (y - s) /                 

applyrule(_a::anything^2=square(_a), expression);

                           /        /    1\  \                               
                           |  square|z - -|  |                               
                           |        \    3/  |
    square(y - 5) + 3 + sin|-----------------| + F(square(f(square(p) + 17)))
                           \t - square(y - s)/                               


subsindets(expression, '`^`'(anything,2), u->square(op(1,u)));

                           /        /    1\  \                               
                           |  square|z - -|  |                               
                           |        \    3/  |                               
    square(y - 5) + 3 + sin|-----------------| + F(square(f(square(p) + 17)))
                           \t - square(y - s)/