我正在尝试评估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)
但是,再次出现一个错误,暗示不是infix运算符。我认为这是因为load
和infix
都具有返回值(在我的情况下分别为done
和implies
),以某种方式破坏了该块。
绝对有必要将整个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)
工作。这不是我的选择。
答案 0 :(得分:1)
对所有块进行分析,然后对其求值。因此,如果该块显示类似
block (load ("my_file.mac"), p implies q);
然后必须在解析该块之前定义“隐式”-不能在该块内定义。
请注意,运算符定义在Maxima中是全局的。如果您写block(infix("implies"), ...)
,则“ implies”仍然是全局定义;它不限于定义它的块。
也许您可以说说更多有关您要实现的目标。