我如何合并lisp和Java。或者我如何使用Java运行lisp代码

时间:2017-10-06 17:35:18

标签: java lisp

我知道这两种语言,但我不知道如何合并这些语言。
请举例说明一些工具。

1 个答案:

答案 0 :(得分:3)

如果您对Common Lisp感兴趣,可能会有很多实现。我所知道的是Armed Bear Common Lisp,根据他们的user documentation,你可以混合主机代码(例如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 page也有其他解决方案。我特别希望披风。由于ABCL实现了在JVM上运行的CL,Cloak似乎在SBCL下实现了JVM。