【发布时间】:2011-12-23 15:30:50
【问题描述】:
我正在寻找用于创建 Mathematica Notebook 文件的原型“Hello World”程序。
我有这个工作程序。
package graphica;
import com.wolfram.jlink.*;
/**
*
* @author Nilo
*/
public class MathematicaTester {
public static void main(String[] args) {
KernelLink ml = null;
String jLinkDir = "C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\\SystemFiles\\Links\\JLink";
System.setProperty("com.wolfram.jlink.libdir", jLinkDir);
try {
ml = MathLinkFactory.createKernelLink("-linkmode launch -linkname 'C:\\Program Files\\Wolfram Research\\Mathematica\\8.0\\MathKernel.exe'");
ml.discardAnswer();
String expr = "Sum[k^2,{k,1,11}]";
ml.evaluate(expr);
ml.waitForAnswer();
String x = ml.getString();
System.out.println("Result = " + x);
} catch (MathLinkException e) {
System.out.println("Fatal error opening link: " +
e.getMessage());
return;
}
}
}
当我运行它时,我得到以下 -expected- 输出。
运行:
结果 = 506
构建成功(总时间:2 秒)
问题:
我想更改这个程序,以便创建 Mathematica Notebook。该程序将(最终)逐行添加 mma 命令字符串。如果同时启动 Mathematica 前端并且 mma 代码由 Java 程序的请求进行评估,那就太好了。本质是创建一个笔记本,以后可以由 mma 前端打开。
【问题讨论】:
-
我对 Mathematica 不是很了解,但是如果 notebook 就像一个项目文件,你必须知道它的结构。如果它是二进制文件,你必须对其进行逆向工程......官方网站(或任何非官方网站)是否对此有任何说明?
-
@david - Mathematica - Java 集成基于 J/Link。我浏览了文档,但没有找到我需要的东西。 - 我想确保在开始黑客攻击之前我没有错过任何东西或者可以在这里获得 HelloWorld。
-
@niloderoock Mathematica 笔记本实际上是纯文本,因此您可以通过使用文本编辑器查看其底层结构。我帮不了你的 Java 位。
-
我对 Java 了解不多,所以我会远离那个领域。但似乎您设法从 Java 评估内核中的任意表达式。创建笔记本对象的函数是
CreateDocument[](然后您可以查看操作它的所有函数的文档,包括写入和保存)。现在要注意的是,这仅在存在前端时才有效。因此,您需要将其评估为UsingFrontEnd[nb = CreateDocument[]]。这将导致内核启动后台前端并使用它。使用命令行会话在 Win 上测试,希望它在 J 中有效 -
@niloderoock 感谢您发布代码。