【问题标题】:(wx)Maxima: determining the number of parts of an expression(wx)Maxima:确定表达式的部分数
【发布时间】:2021-05-24 20:27:39
【问题描述】:

我想使用part 来处理不同长度的表达式,但在文档中找不到任何关于如何确定表达式部分数的内容。

我确实有零件数量的上限,所以在这种特殊情况下,我可以循环遍历这些术语,直到出现错误;但是,我想知道是否有更直接的方法?

【问题讨论】:

    标签: maxima wxmaxima


    【解决方案1】:

    我不敢相信,但似乎 length 可以解决问题。

    我认为它仅限于列表,因为它返回单个数字的错误,因为它们是原子。显然,我的大脑决定“不适用于原子”意味着“仅适用于列表”。

    但是,这确实意味着如果表达式只有一个部分,partlength 都将不起作用,因此必须单独处理这种情况。

    我仍然想知道是否有适用于所有情况的解决方案,所以我暂时不会将此标记为答案。

    【讨论】:

    • 没有一个类似length 的函数可以同时覆盖原子和非原子;最接近的是自己滚动,例如f(e) := if atom(e) then FOO else length(e),其中 FOO 代表您对原子的期望,也许是 0,无论如何这取决于您希望这些东西如何工作。但是请注意length([]) 是0,length(f()) 也是0。所以如果你说一个原子的类长度函数是0,那么你就无法区分原子和空的非原子表达式。我倾向于认为这样做最终可能会引起混乱。
    • 另外,你提到了part。我猜您可能正在尝试查看表达式的参数并弄清楚如何处理它。很多这类东西是由模式匹配函数(tellsimp/tellimpafter/defrule/defmatch)实现的,所以如果你正在这样做,使用模式匹配可能会更清晰、更简单,尽管模式匹配有其局限性,因此有时无法避免手动操作。
    • 谢谢罗伯特——在这种情况下,我试图调用一个多项式的项,其长度可能会有所不同(例如,从 1 项到最大 ~8 项)。我正在使用这些表达式为一般多项式长除法构建 TeX 输出(包括为单个项着色)。我认为args 不适用于多项式,但只是对其进行了测试并看到它确实有效。不幸的是,我相信args 与原子表达式有同样的问题。自发地,我倾向于将原子表达式的“长度”定义为 1,而不是 0,但我想这与您所描述的问题相似。
    • opargs 适用于所有非原子表达式,如您所见。关于length(<atom>) 等于1,那么length 不区分<atom>[<atom>](即一个元素的列表,即<atom>)。至少还有一个其他系统说,实际上,任何<atom> 实际上是<typeofatom>(<atom>),因此让运算符得到<typeofthing>,而得到参数本身得到<atom>。这是一个有趣的想法,但无论好坏,Maxima 都区分了原子和非原子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多