如何通过从 Java 传递参数来运行 lisp 脚本



我正在尝试通过从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。

最新更新