Maxima:自定义输出显示时如何向用户保留提示消息例如 asksign()?

问题描述

我正在开发一个到 Maxima 的接口(来自 R),它在启动时通过 init 文件更改 maxima 的输出显示

load("mactex-utilities")$
load("alt-display.mac")$
set_prompt('prefix,"prompt;>>")$
set_prompt('suffix,"<<prompt;")$
my_display(x):=(?princ("out;>>"),?princ("(%o"),?princ(linenum),?princ(") "),tex(?caddr(x)),?princ("<<out;"))$
set_alt_display(2,my_display)$

现在我正在尝试处理 Maxima 提示用户声明关于变量的假设的情况,如本例所示:

(%i1) L: sqrt(1 - 1/(R^2));
                                          1
(%o1)                            sqrt(1 - --)
                                           2
                                          R
(%i2) integrate(x,x,L);
Is R positive or negative?

positive;
                                     2
                                    R  - 1
(%o2)                               ------
                                        2
                                     2 R
(%i3) 

所以显示的是提示信息“R是正数还是负数?”。但是,当我使用上面的初始化文件时,不会打印此消息。但是,控制台会等待用户输入。所以我的问题是,如果有办法,我可以将它包含在我的自定义输出中。最好,我认为应该也可以将它包装在前/后缀字符串中,以便我的界面正确捕获它,但我不太熟悉 maxima 内部结构。

只是为了记录,我的界面的 repo 是 https://www.github.com/rcst/rmaxima

解决方法

此主题已在 maxima 邮件列表 (here) 上解决

本质上这似乎是 alt-display.lisp 代码中的一个错误

感谢 Leo Butler,这里是初始化脚本的重写版本,此外还自定义了规避问题的用户提示消息。

(load("mactex-utilities"),load("alt-display.mac"));
(set_prompt('prefix,"prompt;>>",'suffix,"<<prompt;"),my_display(x):=block([type],type:?caar(x),if type=?mtext then printf(true,"~%TEXT;>>~%~a~%<<TEXT;~%",?cadr(x))
else if type=?mlabel then printf(true,"~%out;>>~%(~a) ~a~a~a~%<<out;~%",?cadr(x),"$$",tex1(?caddr(x)),"$$")
else block([alt_display1d:false,alt_display2d:false],displa(x))),set_alt_display(2,my_display)) $

当使用它来初始化最大值时,上面例子的输出是

prompt;>>(%i1) <<prompt;L: sqrt(1 - 1/(R^2));

out;>>
(%o1) $$\sqrt{1-\frac{1}{R^2}}$$
<<out;
prompt;>>(%i2) <<prompt;integrate(x,x,L);
prompt;>>
TEXT;>>Is R positive or negative?<<TEXT;
<<prompt;
p;

out;>>
(%o2) $$\frac{R^2-1}{2\,R^2}$$
<<out;
prompt;>>(%i3) <<prompt;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...