我正在搜索 API 以使用 Java 处理 JVM 中 Common Lisp 语言的 Armed Bear Common Lisp (ABCL) 实现中的值。
它在函数返回(仅)列表或字符串时起作用。
当它返回多个值时,我只能获取第一个返回值。
我不知道如何获取其他值。
这是我的 test.lisp 文件:
(defun get-list ()
(list "abc" 12 'a 'b))
(defun get-value ()
(values "abc" 12 'a 'b))
我的Java代码是:
public static void main(String[] args) throws Exception {
Interpreter interpreter = Interpreter.createInstance();
LispObject lobj = interpreter.eval("(load \"test.lisp\")");
org.armedbear.lisp.Package defaultPackage = Packages.findPackage("CL-USER");
Symbol myFunctionSym = defaultPackage.findAccessibleSymbol("GET-LIST");
Function myFunction = (Function) myFunctionSym.getSymbolFunction();
LispObject o = myFunction.execute();
System.out.println(o.listp()); // this return false
Symbol myFunctionSym2 = defaultPackage.findAccessibleSymbol("GET-VALUE");
Function myFunction2 = (Function) myFunctionSym.getSymbolFunction();
LispObject o2 = myFunction.execute();
}