我正在尝试通过从Java传递参数来运行lisp脚本。
例如:
在下面的脚本中,x 的值应该从 Java 代码传递。
(defun double (x) (* x 2))
你能举几个例子吗?
如果你对Common Lisp感兴趣,可能有很多实现。我知道的一个是 Armed Bear Common Lisp,根据他们的用户文档,您可以混合主机代码(例如。Java 库和类)和 CL 代码。
从 Java 运行 Lisp 代码:
Interpreter interpreter = Interpreter.createInstance();
interpreter.eval("(load "my-lisp-code.lisp")");
Symbol myFunctionSym =
defaultPackage.findAccessibleSymbol(
"MY-FUNCTION");
Function myFunction =
myFunctionSym.getSymbolFunction();
Cons list =
(Cons) myFunction.execute(
Fixnum.getInstance(64),
Fixnum.getInstance(64));
从Common Lisp调用Java:
public class Main {
public int addTwoNumbers(int a, int b) {
return a + b;
}
}
(defun void-function (param)
(let* ((class (jclass "Main"))
(intclass (jclass "int"))
(method (jmethod class "addTwoNumbers" intclass intclass))
(result (jcall method param 2 4)))
(format t "in void-function, result of calling addTwoNumbers(2, 4): ~a~%" result)))
关于CL和Java集成的Lisp Wiki页面也有其他解决方案。我对斗篷特别抱有希望。由于ABCL实现了在JVM上运行的CL,Cloak似乎在SBCL下实现了JVM。