JSCL是Common Lisp(CL)的实现之一。
它涵盖了除CLOS、format等之外的许多CL特性。
它的REPL与其他CL实现一样。
我想知道如何从JS端调用CL代码。
我想这样做:

// set the CL codes as string
var codes = "(defun f1(x) (+ x 1) )
(f1 99)";

// call CL codes from JSCL
JSCL.CL.call(codes);
=> 100

我想在JSCL中找到这样一种方法。

最佳答案

您可以从JS控制台调用公共Lisp函数和特殊表单。
您只需要在浏览器的控制台上键入以下代码。
在下面的示例中,第一个代码定义返回增值1的函数第二个代码调用函数并打印计算值100。

jscl.CL.PRINT.fvalue.call(this, jscl.internals.pv, jscl.CL.EVAL.fvalue.call(this, jscl.internals.pv, jscl.packages["COMMON-LISP"].symbols["READ-FROM-STRING"].fvalue.call(this, jscl.internals.pv, jscl.internals.js_to_lisp("(defun f1(x)(+ x 1))"))))

jscl.CL.PRINT.fvalue.call(this, jscl.internals.pv, jscl.CL.EVAL.fvalue.call(this, jscl.internals.pv, jscl.packages["COMMON-LISP"].symbols["READ-FROM-STRING"].fvalue.call(this, jscl.internals.pv, jscl.internals.js_to_lisp("(f1 99)"))))

10-06 00:18