【问题标题】:Is there a way to force code to be run inside maxima block?有没有办法强制代码在最大值块内运行?
【发布时间】:2020-08-26 17:47:25
【问题描述】:

我正在尝试评估 Maxima 块中的一些代码,但它似乎不起作用。 如果我想要某种形式的东西

block( load("my_file.mac"), do_stuff )

它似乎没有加载文件。我想通过以下方式从该文件中定义我唯一需要的东西来规避这个问题

block( "implies"(p, q) := not p or q, infix("implies"), expr: p implies q, do_other_stuff)

但是,我再次收到一个错误,暗示不是中缀运算符。我认为这是因为loadinfix 都有一个返回值(在我的情况下分别为doneimplies),它以某种方式破坏了块。

绝对有必要将整个 Maxima 代码包含在一个块中。所以虽然两者都

load("my_file.mac"); block(do_stuff)

"implies"(p, q) := not p or q; infix("implies"); block(expr: p implies q, do_other_stuff)

工作。这不是我的选择。

【问题讨论】:

    标签: maxima wxmaxima


    【解决方案1】:

    在评估之前解析所有块。所以如果块说类似

    block (load ("my_file.mac"), p implies q);
    

    那么“隐含”必须在解析块之前定义——它不能在块中定义。

    请注意,运算符定义在 Maxima 中是全局的。如果你写block(infix("implies"), ...),那么“隐含”仍然是一个全局定义;它不限于定义它的块。

    也许你可以多说一些你想要达到的目标。

    【讨论】:

    • 谢谢!这已经有所帮助。我想做的是解释 openmath/mathML 给我的表达式。更具体地说:有人在网上写了一个表达式,它会自动转换为 Maxima 表达式,在这种特定情况下,$p \Rightarrow q$ 被解释为“p 暗示 q”。我想编写一些可以识别是否给出了正确表达式的代码,以及一些其他代码可以检查它是否不是正确的表达式,但是,例如,交换了 $p$ 或 $q$。
    • 好的,听起来不错。你听说过堆栈吗?它是一个基于 Maxima 的自动评估答案的系统。也许你可以以某种方式利用它。如果您正在解析输入字符串,可能parse_string 是相关的。关于检查结果,您可以考虑使用模式匹配(defrule、defmatch 和 matchdeclare)。请注意,Maxima 中的“模式匹配”是指匹配表达式,而不是字符串。
    猜你喜欢
    • 2011-08-02
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多